首页 > 解决方案 > C preprocessor adds trailing "1" after expanding a macro defined in a command line

问题描述

$ echo 'MACRO();' | gcc -D'MACRO() hello' -E -P -
hello 1;
      ^ why 1?!!!!

Do you know why it adds trailing "1" after expanding the macro?

标签: cgccc-preprocessor

解决方案


GCC 预处理器文档

-D 名称

将名称预定义为宏,定义为 1。

-D 名称=定义

将名称预定义为宏,并带有定义定义。定义的内容被标记和处理,就好像它们出现在#define 指令中的第三阶段一样。

所以你要:

$ echo 'MACRO();' | gcc -D'MACRO()=hello' -E -P -
hello;

注意定义中的等号。

至于为什么它没有它会做什么:空格是预处理器符号定义中的分隔符。所以预处理器将“hello”分配给符号。然后注意到定义中没有等号,所以它也附加了默认的“1”。这不是错误,它只是预处理器符号“中”的空格。

$ echo 'MACRO();' | gcc -D'MACRO() hello=foo' -E -P -
hello foo;

推荐阅读