gpt4 book ai didi

C 预处理器在扩展命令行中定义的宏后添加尾随 "1"

转载 作者:行者123 更新时间:2023-12-02 08:07:02 25 4
gpt4 key购买 nike

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

你知道为什么展开宏后尾部加“1”吗?

最佳答案

来自GCC preprocessor documentation :

-D name

Predefine name as a macro, with definition 1.

-D name=definition

Predefine name as a macro, with definition definition. The contents of definition are tokenized and processed as if they appeared during translation phase three in a #define directive.

所以你想要:

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

注意定义中的等号。

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

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

关于C 预处理器在扩展命令行中定义的宏后添加尾随 "1",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50442514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com