上节课我们安装了GCC编译器,并且创建了一个最简单的hello world 例子,这节课,我们来讲解一下这个例子。首先看例子如下:
#include <stdio.h>
int main()
{
printf("hello, world\n");
return 0;
}
Code language: C/AL (cal)
代码很简单,就输出一行文字。
下面从上往下,解析每一行代码。
1. #include <stdio.h>
第一节课,我们提了一下预处理,那么这里的第一句代码就是预处理了。从哪里看出来?# 这个符号就是了。
#:预处理指令标记,交给预处理器处理,编译代码第一步执行。
include:导入头文件关键字,作用是把指定文件里的代码复制到当前程序。
<stdio.h>:标准输入输出头文件(standard input output)。 里面封装了屏幕打印、键盘读取等输入输出函数,下面用到的printf 函数就定义在这个文件里。
其实,预处理不属于C语言的一部分,其实,严格上说,C语言的预处理并不是C语言语法的一部分,而是由编译器在编译之前执行的一个独立阶段。它属于编译过程的一环,但不属于C语言的核心语法和语义体系。
也就是说,预处理,是先有一个独立的程序,去做一些替换等操作,比如这里的#include <stdio.h> 就是把stdio.h 这个文件里面的代码拷贝到这里,然后替换了这句“#include <stdio.h>” ,所以假如这个头文件stdio.h里面的 AAAAAAAAA
那么,最终,到达编译器编译的时候,代码其实是这样的:
AAAAAAAAA
int main()
{
printf("hello, world\n");
return 0;
}
Code language: C/AL (cal)
当然这是假设头文件里面是 AAAAAAAAA,事实上,里面并不是。感兴趣的同学可以查看一下这个头文件的内容。
这个头文件,就在你的电脑上面,不同操作系统可能不一样
在 Linux/Unix 系统:通常位于 /usr/include/stdio.h。
在 Windows (Visual Studio):位于 VC/include/stdio.h。
在 macOS (Xcode):位于 /Applications/Xcode.app/.../usr/include/stdio.h。
读者可以借助一些工具,来搜索一下你电脑的这个文件的位置
现在你的对预编译应该有一定的了解了?
如果没有 不加这一行#include <stdio.h>,编译器不认识 printf,会直接报错。读者可以删除,然后再使用gcc,来编译试一下

再次编译报错

2. int main()
main = C 语言程序入口函数
- 任何 C 程序运行时,系统都会自动从
main函数开始执行,有且只能有一个 main。 int:代表函数返回值类型,整数(integer)。():表示这是函数,括号内可以写参数,空括号代表无参数。
这个main,几乎是后面大部分编程语言都继承了这种写法,它是程序的入口,当用户双击exe,或者命令行执行这个exe文件 例如输入hello 这个命令的时候,操作系统会帮你调用这个main函数的,它是程序的入口,由操作系统调用;
前面的int,是函数的类型,后面我们自己定义函数,都需要有一个函数的返回类型,等我们后面学到的时候,读者们就会理解了。
小括号() 表示,这个函数接受那些类型的参数,这里是空的,也就是括号里面没有内容,也就是这个函数不接受参数。正常你可以接收参数的。例如:
int main(int argc, char *argv[])Code language: CSS (css)
这样写,就是接收两个参数,一个是int类型,一个是(字符串数组),这个我们后面再解析,后面的课程。
这个main函数,的这些参数,是操作系统传入的。那么这些参数,怎么传入进来?
读者有没有用过一些doc系统的应用,或者有没有用过ping这个命令。比如我们要ping一个ip 看看能不能联通,例如ping 12.36.4.xxx ,那么这里的ping 就是ping.exe 这个程序了12.36.4.xxx 后面的这个ip 就相当于传入参数给这个ping.exe 的main了
所以,我们的hello的程序,如果你要传入参数,也可以 hello abc 那么这个abc 也相当于传入进去,那么这里的main后面的小括号,里面的这些参数,就是接收这些传进来的值。操作系统帮你拿到这些值,然后传入到这个main函数。
反正读者,可以暂时理解,这个main 就是程序的入口,只有一个。操作系统调用的,操作系统把从命令行中获取的值传递到这里。
3. { } 大括号
函数体的上下边界,{ 代表函数开始,} 代表函数结束,所有函数里面的代码写他们的中间。
4. printf("hello, world\n");
printf:print format,格式化输出函数,功能是往控制台打印文字。- 双引号
" ":包裹字符串常量,里面是要输出的文本。 \n:转义字符,换行符,打印完文字自动换到下一行。;:C 语言语句结束标记,每一条执行语句末尾必须加分号,漏写会编译报错。
后面的f 就是格式化输出,我们后面会学到这个。你暂时先理解为 输出一个文本,然后这个文本hello, world\n就显示到控制台哪里,后面的\n 是输出前面的hello,world 后就换行。
5. return 0;
return:给main函数返回一个整数,终止当前函数。为什么要return?因为我们的main前面有int ,所以函数体里面必须返回一个整数。0:约定含义:程序正常、无错误运行完毕。(告诉操作系统,程序是否有错)- 返回
0= 程序执行成功 - 返回非 0 数字(如
return 1;)= 程序异常退出
- 返回
现代 C 标准允许
main末尾省略return 0;,编译器会自动补,但新手建议规范写上。