这让我感到困惑:
要定义类似函数的宏,可以使用相同的'#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编程,所以我可能会经常发生误解,我搜索了一个正确的解释,最后在这里求助.请帮我解决一下这个.