赞
踩
Makefile中常见到-D,但这其实不是makefile所有的,而是gcc所有的。
-D name
Predefine name as a macro, with definition 1.
定义宏,且将其值默认定义为1
gcc -D FOO
gcc -DFOO
可通过以上两种方式来宏定义FOO,即-D后加空格或不加空格都可以,这两种方式定义,FOO的值默认为1。
gcc -DFOO=2
gcc -D FOO=2
以上两种方式均可宏定义FOO且将其值定义为2。
注:FOO=2中间不能有空格
-U name
Cancel any previous definition of name,
either built in or provided with a -D option.
取消宏定义,我现在的理解是取消在gcc编译时定义的某宏定义,即取消gcc命令中-U之前对应的-D,其不能取消源代码中定义的相应宏定义
gcc -U FOO
gcc -UFOO
可通过以上两种方式来取消宏定义FOO,即-U后加空格或不加空格都可以。
#include <stdio.h>
int main()
{
#ifdef FOO
printf("foo defined, its value is %d\n", FOO);
#else
printf("foo undefined\n");
#endif
return 0;
}
编译
gcc testD.c -D FOO
结果
foo defined, its value is 1
FOO的值默认设置为1
编译
gcc testD.c -D FOO=2
结果
foo defined, its value is 2
编译
gcc testD.c -D FOO=2 -U FOO
结果
foo undefined
编译
$gcc testD.c -U FOO -D FOO=2
结果
foo defined, its value is 2
-U只能取消其之前对应的-D
#include <stdio.h> #define FOO 2 // !!!!!! 修改在这里 int main() { #ifdef FOO printf("foo defined, its value is %d\n", FOO); #else printf("foo undefined\n"); #endif return 0; }
编译
$gcc testD.c
结果
foo defined, its value is 2
编译
gcc testD.c -U FOO
结果
foo defined, its value is 2
可见-U不能取消代码中的宏定义
$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。