小编Men*_*ias的帖子

像宏这样的函数是否需要强制括号?在参考GCC cpp手册后我很困惑

这让我感到困惑:

要定义类似函数的宏,可以使用相同的'#define'指令,但是在宏名称后面紧跟一对括号.

我相信这是为了让代码脱颖而出,而不是该程序的作者.像宏名称的其他CAPS规则一样.但以下是我感到困惑的地方:

类似函数的宏只有在其名称后面带有一对括号时才会展开.如果你只是写下这个名字,那就不管它了.

我读完之后立刻就不同意了.并且gcc -E验证了以下代码

#define FUNC display()

void display()
  {
    printf("Display\n");
  }

int main()
  {
    FUNC;
    return 0;
   }
Run Code Online (Sandbox Code Playgroud)

预处理的输出按预期显示main()函数的内容:

int main()
  {
    display();
    return 0;
  }
Run Code Online (Sandbox Code Playgroud)

那我在这里错过了什么?预处理器用于标记源,宏扩展是一个标记,上面的代码以这种方式处理,预处理器不应该检查任何东西或验证任何东西,它只是转储令牌.在那种情况下,gcc手册试图传达什么.

我正在学习C编程,所以我可能会经常发生误解,我搜索了一个正确的解释,最后在这里求助.请帮我解决一下这个.

c macros gcc expansion c-preprocessor

2
推荐指数
1
解决办法
354
查看次数

标签 统计

c ×1

c-preprocessor ×1

expansion ×1

gcc ×1

macros ×1