C 语言简介:
C 语言是一种通用的高级语言(在高级语言中偏低级),特点是简洁,高效,难学,是c++ 和 objective-c 的必经之路。
C 语言编程环境搭建:
Linux 平台(CentOS/Ubuntu)
gcc 编译器 (编译器是将源程序编译成可执行文件的软件)
vim 编辑器 (文本编辑器,写程序源文件的软件)
CentOS: # yum install gcc # yun install vim Ubuntu: $ apt-get install gcc $ apt-get install vim
Windows 平台
MinGw (一个能在windows 平台上运行 gcc 的软件)
notepad++ (不要用windows 自带记事本,你可以用其他十六进制文本编辑器如 editplus 等)
由于我学习 C 语言,是为了更好的理解 Linux,故我写的均是运行在 Linux 平台下的 C
第一个 C 语言程序:
按照传统,每当你想攻略一个编程语言(不管成与不成),必先来一个 Hello World。我们就从这个神级的 Hello World 开始
#include <stdio.h> int main() { /* 输出 Hello world! */ printf("Hello World!\n"); return 0; }
我们来一行一行的分析这个神一样的 Hello World:
#include <stdio.h>
以 # 作为行开头的指令是预处理指令,#include <stdio.h> 是引用 stdio.h 头文件,在后续的 预处理篇 会详细描写预处理指令。
int main()
main 函数,又叫主函数,是一个程序的入口,在一个 C语言程序中必须有它。 int 表示函数的返回值是整型,有的书上也会写 void或者不写,表示函数返回值为空。在 GNU C 标准下,主函数的返回值是 int 类型(so,不要纠void,遵守写 int 就行了 )。main 后的() 里为空表示 main 函数的参数为空(void)。关于函数,在之后的 函数篇会详细写到。
{ }
代码块的标记,C语言中 单条语句用 ; 结束, 即 ; 是语句的结束符。多条语句组成代码块,用{ } 包裹起来,此处的{ }内的代码块属于主函数的。
/* ... */
注释,支持多行,注释写代码实现的功能。单行注释可用 //, 符号 // 之后的内容被认为是注释
printf("Hello World!\n");
printf 是头文件 stdio.h 里面声明的一个库函数,若前没引用头文件 stdio.h,则无法使用它。 其作用是标准输出到终端。
return 0;
return 代表函数执行的终止,main函数中碰到 return,函数执行结束,而在 return 下的代码将不会去执行。0 代表 main函数的返回值为 0, 如果是写 void main(),表示返回值为空,则写 return ; 。那么为什么写 0 而不是其他数字呢? 还记得 Linux 中查看命令是否执行成功的状态退出码么, echo $? ,如果正常执行成功返回 0 ,非正常退出返回其他值。此处 0 就是 main函数的退出值,代表执行成功,把 0 返回给调用者,当然其他整数也行,但习惯上是 0,应准守标准。
在 C语言中支持 int main() , void main() , 在 C++ 中只支持 int main()
;
每条可执行语句后都以 ; 结尾
用文本编辑器写完后将源程序文件保存为 .c 后缀,如 hello.c
编译过程:
C 源程序 ---> 预处理 ---> 编译 ---> 汇编 ---> 链接 ---> 可执行文件
预处理:
gcc -E hello.c > hello.i
把 gcc 预处理后的结果重定向给 hello.i(.i 为 gcc识别预处理文件的后缀),以 # 开头的预处理指令将会在此阶段全部解决掉
编译:
gcc -S hello.i
生成 hello.s,把 C程序转换成汇编程序,如果对汇编熟悉的可以 vim hello.c 看下
汇编:
gcc -c hello.s
对汇编文件,进行汇编,将生成 hello.o 文件
链接:
gcc hello.o -o hello
将 hello.o 链接为 hello 的可执行文件, ./hello 将执行该程序
以上过程是为了帮助理解 C源程序 到可执行文件的具体过程,平时大可不必这么麻烦。
gcc hello.c 默认得到一个 a.out 的可执行文件
或 gcc hello.o -o hello 得到 hello 可执行文件
执行 C 程序:
在 Windows中可执行文件为 .exe 后缀,故使用 gcc hello.o -o hello.exe ,直接使用 hello.exe 执行即可
Linux 下有个更加方便的工具 make
make hello
不需要加 .c 后缀,它的实质是 gcc hello.o -o hello
[root@example New]# make hello cc hello.o -o hello [root@example New]# ./hello Hello World!
ps: ヽ(≧∀≦)ノ