GCC命令详解与实践(六) -- 预处理器选项

我们知道,预处理是在C源文件编译之前进行的,预处理器选项是用来控制编译器执行代码预处理的选项。

在预编译器选项中,我们只使用-E选项进行预处理,当只使用-E选项时,编译器除了预处理之外什么也不做。

而有一些预处理选项需要与-E一起使用才有意义,否则它们会导致预处理输出的结果不适合实际编译。

以下是一些常用的预处理选项。

gcc -D

用法:gcc -D <name> <filename>

作用: 预定义一个宏,且该宏的值为1。

例如:

gcc -D NUM foo.c

以上的举例gcc -D NUM foo.c中的foo.c代码如下,它的作用是输出一个由-D选项预定义的宏NUM的值。

#include <stdio.h>

int main(void)
{
	int num1 = NUM;
	
	printf("num1= %d",num1);
	
	return 0;	
}

在命令行中运行gcc -D NUM foo.c命令,编译输出一个默认的可执行文件为a.exe文件,我们之间运行该文件,可以查看输出的值为1。
-D编译选项实例

-D 选项还可以设定宏的值,这与#define类似,语法为:-D <name>=<definition>
例如:

gcc -D NUM=20 foo.c

gcc -U

用法:gcc -U <name> <filename>

作用:取消之前对<name>的预定义,无论是内建的还是由-D选项提供的。

例如:

gcc -U NUM foo.c

gcc -include

用法:gcc -include <filename>

作用:include一个文件进文件<filename>中,这种用法类似于在文件头部写一句 #include <filename>。

例如:

gcc -include stdio.h foo.c

以上的举例gcc -include stdio.h foo.c中的foo.c代码如下,我们把原本的#include <stdio.h> 注释掉,num1赋值为10。代码如下:

/* #include <stdio.h> */

int main(void)
{
	int num1 = 10;
	
	printf("num1= %d",num1);
	
	return 0;	
}

在命令行中运行gcc -include stdio.h foo.c命令,将生成a.exe文件,运行a.exe看到输出结果为 num1 = 10。
pre_option2

gcc -M

用法:gcc -M <filename>

作用:-M选项的作用不是用来输出预处理的结果,而是用来输出程序在make过程中的依赖规则。

例如:

gcc -M foo.c

同样是使用前面的foo.c文件,在命令行环境下运行gcc -M foo.c,我们可以查看foo.c的make依赖规则:foo.o:foo.c。
pre_option3

gcc -C

用法:gcc -C <filename>

作用:-C选项的作用保留编译过程中的打印信息。即在编译过程中,显示编译过程信息。类似的命令还有-CC,但-CC还包括宏的一些扩展信息。

例如:

gcc -C foo.c

以上就是常用的编译器预处理选项的内容,如果你想了解更多详细的内容,可以到gcc官网《Preprocessor-Options》进行学习。