C语言 03-第一个C程序代码分析
本文目录
![](http://images0.cnblogs.com/blog/497279/201303/13111449-cf5c5d72187f448eaf297c81517bd52c.png)
一、代码分析
打开项目中的main.c文件(C程序的源文件拓展名为.c),可以发现它是第一个C程序中的唯一一个源文件,代码如下:
1 #include <stdio.h> 2 3 int main(int argc, const char * argv[]) 4 { 5 6 // insert code here... 7 printf("Hello, World!\n"); 8 return 0; 9 }
1.#include <stdio.h>
- #include 是C语言的预处理指令之一,所谓预处理,就是在编译之前做的处理,预处理指令一般以 # 开头。
- #include 指令后面会跟着一个文件名,预处理器发现 #include 指令后,就会根据文件名去查找文件,并把这个文件的内容包含到当前文件中。被包含文件中的文本将替换源文件中的 #include 指令,就像你把被包含文件中的全部内容拷贝到这个 #include 指令所在的位置一样。
- 如果被包含的文件拓展名为.h,我们称之为"头文件"(Header File),头文件可以用来声明函数("函数"就是面向对象中的"方法"),要想使用这些函数,就必须先用 #include 指令包含函数所在的头文件。
- #include 指令不仅仅限于.h头文件,可以包含任何编译器能识别的C/C++代码文件,包括.c,.hpp,.cpp等,甚至.txt,.abc等等都可以。
![](http://images0.cnblogs.com/blog/497279/201303/13113743-200491267d224fbea0d945d9aa90158e.png)
![](http://images0.cnblogs.com/blog/497279/201303/13113806-d1bda13ca59841379190d5cde575f496.png)
程序还是可以照常运行的,因为 #include 的功能就是将文件内容完全拷贝到 #include 指令所在的位置。
这里要注意的是:这里的main函数没有写返回值类型,并不代表函数没有返回值,而是表示返回值类型为int类型,void才代表函数没有返回值由于C语言的语法限制不严格,我们还可以进一步简化main函数:
虽然它要求main函数返回int类型的值,但我们可以不返回。
- 不过你可能会疑惑,为什么stdio.h用尖括号<>,而my.txt用双引号"" ?这个很好区别,如果是系统自带的文件,最好用<>;如果是开发人员自己创建的文件,最好用“”。因为“”是首先寻找开发人员自己创建的文件,如果文件不存在,才会去寻找系统中的文件。
2.main函数
- 前面也已经提到,C中的函数就是面向对象中的"方法"。C语言是一门面向过程的语言,是以过程为中心的编程思想,就是先分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用函数就可以了。
- 一个C程序中一定会有一个main函数,也只能有一个main函数。main函数是整个C程序的入口。main.c的第3行代码就定义了一个main函数。
- main函数的返回值为int类型,接收2个参数,其实可以不写参数。
main() { // insert code here... printf("Hello, World!\n");
return 0; }
main() { // insert code here... printf("Hello, World!\n"); }
3.stdio.h
- stdio.h 是C语言函数库中的一个头文件,里面定义了一些标准输入输出函数。在main.c的第1行代码中,用#include指令包含了stdio.h文件。
- 这里之所以包含 stdio.h 文件,是因为在第7行中用到了在 stdio.h 内部声明的printf函数,这个函数可以向标准输出设备(比如显示器屏幕)输出数据,屏幕上输出的文字就是第7行代码printf("Hello, World!\n");造成的,双引号""内的文本为C语言的字符串。
二、开发和运行C程序的步骤
步骤图如下:![](http://images0.cnblogs.com/blog/497279/201303/13124858-72e7aae9902b47af8f7186dfb3327ca6.png)
1.编写程序
C语言源文件的扩展名为".c",源文件以ASCII码形式存储,不能直接被计算机执行,因为计算机只能识别二进制指令,也就是0和1。2.编译(VC环境下)
- 把C的源程序翻译成计算机可以识别的二进制形式的目标代码文件,这个过程称为编译,由C的编译器完成。
- 在编译的同时,还对源程序的语法等进行检查。若出现语法错误,则编译失败。如果编译成功则生成目标文件,目标文件名跟源程序文件名一样,扩展名为".obj"。比如,lee.c编译后生成目标文件lee.obj。
- 每个源文件是单独进行编译的,假如一个项目中有多个.c源文件,编译成功会生成多个对应的.obj目标。一般情况下,目标文件之间是有关联的,比如 a.obj 可能会调用 b.obj 中定义的一个函数,因此它们都不能够单独被计算机执行,而且目标文件中并不包含程序运行所需要的库函数等。
3.链接(VC环境下)
- 将所有有关联的obj目标文件,以及系统提供的C库函数等组合在一起生成可执行文件的过程,称为"链接"。
-
链接生成的可执行文件的文件名跟源程序文件同名,扩展名为".exe",计算机可以直接执行。
4.运行
* 如果是在Windows环境下,直接双击".exe"文件即可运行C语言程序* 由于我们的第一个C程序,是在Mac OS X系统环境下用Xcode创建的命令行项目,Mac OS X系统是基于UNIX系统的,因此生成的可执行文件的这样的:![](http://images0.cnblogs.com/blog/497279/201303/13130054-9a8bd1220a3d4429838574f7aca77a32.png)
* 双击可以用终端(命令行)打开:
![](http://images0.cnblogs.com/blog/497279/201303/13130823-87b46d6b324b4309b9a7a5f411835687.png)
三、总结
说了这么多,总结一下第一个C程序的运行步骤:![](http://images0.cnblogs.com/blog/497279/201303/13130935-0da80cc2f4f84e8494bbb8933f60323b.png)
1.在编译前先执行#include指令,拷贝stdio.h的内容到源程序中。
2.编译源程序,生成目标文件。
3.链接C语言函数库,生成可执行文件。
4.运行可执行文件,在屏幕上输出"Hello, World!"看起来好像挺多步骤的、挺麻烦的,但是当我们点击Xcode的运行按钮时,Xcode会自动按顺序执行上面4个步骤 。
![](http://images0.cnblogs.com/blog/497279/201303/13131304-7f023a5f72f24ab08628761b3b814b0e.png)