在上一篇文章我们已经使用过 GCC 编译器来编译 C 文件了,我们使用到是 gcc 命令,gcc 命令格式如下:
gcc [选项] [文件名字]
主要选项如下:
-c:只编译不链接为可执行文件,编译器将输入的.c 文件编译为.o 的目标文件。
-o:<输出文件名>用来指定编译结束以后的输出文件名,如果不使用这个选项的话 GCC 默
认编译出来的可执行文件名字为 a.out。 -g:添加调试信息,如果要使用调试工具(如 GDB)的话就必须加入此选项,此选项指示编
译的时候生成调试所需的符号信息。
-O:对程序进行优化编译,如果使用此选项的话整个源代码在编译、链接的的时候都会进
行优化,这样产生的可执行文件执行效率就高。
-O2:比-O 更幅度更大的优化,生成的可执行效率更高,但是整个编译过程会很慢。
在 Windows 下不管我们用啥编译器,如果程序有语法错误,那么编译的时候都会指示出来,比如开发 STM32 的时候所使用的 MDK 和 IAR,我们可以根据错误信息方便的修改 bug。那GCC 编译器有没有错误提示呢?肯定是有的,我们可以测试一下,新名为“3.2”的文件夹,使用 vi 在文件夹“3.2”中创建一个 main.c 文件,在文件里面输入如下代码:

在上述代码中有两处错误:
第 8 行、第一处是“b=4”少写了个一个“;”号。
第 9 行、第二处应该是 printf(“a+b=%d\n”, a + b);
我们编译一下上述代码,看看 GCC 编译器是否能够检查出错误,编译结果如图所示:

可以看出有一个 error,提示在 main.c 文件的第 9 行有错误,错误类型是在printf 之前没有“;”号,这就是第一处错误,我们在“b = 4”后面加上分号,然后接着编译,结果又提示有一个错误,如图所示:

提示我们说文件 main.c 的第 9 行:printf(“a+b=\n”, a + b)有 error,错误是因为太多参数了,我们将其改为:
printf(“a+b=%d\n”, a + b);
修改完成以后接着重新编译一下,结果如图所示:

中我们编译成功,生成了可执行文件 main,执行一下 main,看看结果和我们设计的是否一样,如图所示:

可以看出,GCC 编译器和其它编译器一样,不仅能够检测出错误类型,而且标记除了错误发生在哪个文件、哪一行,方便我们去修改代码。