ant*_*_rh 2 c gcc c-preprocessor
$ echo 'MACRO();' | gcc -D'MACRO() hello' -E -P -
hello 1;
^ why 1?!!!!
Run Code Online (Sandbox Code Playgroud)
你知道为什么在扩展宏后它会增加尾随"1"吗?
-D名字
将名称预定义为宏,定义为1.
-D name = definition
将名称预定义为宏,具有定义定义.定义的内容被标记化并处理,就好像它们在#define指令的翻译阶段3中出现一样.
所以你要:
$ echo 'MACRO();' | gcc -D'MACRO()=hello' -E -P -
hello;
Run Code Online (Sandbox Code Playgroud)
注意定义中的等号.
至于为什么它没有它做它做的事情:空间是预处理器符号定义中的分隔符.因此预处理器为符号分配"hello".然后它注意到定义中没有等号,所以它也附加了默认的"1".这不是一个错误,只是在预处理器符号中的"空间"的情况.
$ echo 'MACRO();' | gcc -D'MACRO() hello=foo' -E -P -
hello foo;
Run Code Online (Sandbox Code Playgroud)