C语言介绍

发明背景:
C语言诞生于1970~1973,在肯·汤普逊和丹尼斯·里奇的领导下编写完成的,所有权归属于贝尔实验室。
C语言是专门编写操作系统的语言,所以天生适合对硬件编程,也以速度快著称,也非常适合实现数据结构和算法。
由于出现时间早,有很多缺陷。由于没想到普通人也会使用C语言编程,因此存在很多的缺陷、陷阱,但是前辈们总结了一些避免的经验,这里可参考数据《C语言陷阱与缺陷》。
语法标准
1989年–C89语法标准,也是gcc默认的编译标准
1999年–C99语法标准,对C语言的扩展和增强 -std=gnu99
2011年–C11语言标准,全新的升级

一、第一个程序

#include <stdio.h>
 int main()
 {
 printf(“Hello World!\n”);
 return 0;
 }
#include <stdio.h>——(程序员所编写的代码并不是标准C代码,需要一段程序对它进行翻译标准的C代码,负责翻译的程序叫做预处理器,翻译的过程叫做预处理,被翻译的代码叫做预处理指令,在C语言中以#开头的都是预处理指令。)
 #include 功能是把一个头文件导入到当前文件中
 #include <> 从系统指定目录下导入头文件
 #include “” 先从当前目录下导入头文件,如果没有,再从系统指定目录下导入头文件
stdio.h
 头文件: .h结尾,里面存储的是一些辅助性的代码,绝大多数都是函数的声明(只是函数的开头)
 源文件: .c结尾,里面记录的是功能性的代码
 C语言标准委员会为C语言以函数形式提供了一些基础功能,这些函数被封装在代码库libc.so中。
 用很多的头文件负责对libc.so进行说明,stdio.h就是其中的说明,常用的还有string.h stdlib.h
 stdio.h主要负责对具有输入输出功能的函数进行说明
int main ()
 {
 printf(“Hello World!\n”);
 return 0;
 }
 C语言以函数为单位管理代码,一个函数就是一段具有某项功能的代码段。
 main 函数是程序的入口,有且只有一个
 int 是一种数据类型,表示main函数的执行结果是一个整数
 return 功能有两个:
 1、结束函数的执行
 2、返回一个执行结果给函数调用者
 main函数是由操作系统调用的,因此它的返回值返回给操作系统,反映了该系统是如何结束,通常有三种情况:
 正数 出现异常(别人的错误)
 0 一切正常
 负数 出现错误(自己的错误)
 echo $? 查看上一个程序main函数的返回值
 printf/scanf 都是标准库中的函数,负责输入、输出数据,用来调试代码

转义字符:
键盘上一些没有的符号,用一些特殊的字符来表示,这些特殊的字符就是转义字符,\n就是其中一个
\n 换行
\打印一个
%% 打印一个%
\r 回到行首
\t 制表符Tab键,用来输出对齐
\a铃响
\b 退一个字符
C语言以分号作为一行代码的结束,使用大括号划分代码区域

** 二:编译器:**

负责把人能看懂的记录代码的文本文件,翻译成计算机能看懂的二进制文件,由预处理器、编译器、链接器组成
gcc 是由GNU组织为了编译Linux代码而开发的一款免费编译器,默认采用C89语法标准,-std=gnu99可以设置为c99语法标准
常用的参数:
-E 显示预处理的结果
-c 只编译不链接
-o 指定编译结果的名字
-S生成汇编代码
-I指定头文件的加载路径
-l指定要使用的代码库 -lm 使用数学库
-wall 以严格的标准检查代码,显示更多的警告提醒
./a.out 输出结果
-werror 把警告当作错误处理
-std 指定编译语法标准

三、把c代码变成可执行程序的过程
1、预处理 把源代码翻译成预处理文件
gcc -E code.c 显示预处理结果到终端上
gcc -E code.c -o code.i 生成以.i结尾的预处理文件

2、编译 把预处理文件翻译成汇编代码
gcc -S code.i ->code.s 生成以.s结尾的汇编文件
3、汇编 把汇编文件翻译成二进制的目标文件
gcc -c code.s ->code.o生成以.o结尾的目标文件
4、链接 把若干个目标文件合并成一个可执行文件
gcc a.o b.0 c.o … ->a.out
今天先分享到这里,剩余知识点明天继续分享~~