编写代码时我发现了一些有趣的东西 我在我的代码中定义了一个宏,并意外地使用该关键字int作为该宏的参数的变量名.代码工作得非常好,但我对此感到有些惊讶.我已经读过,C中的关键字是保留字,不能用作变量名.
这是我的代码:
#include <stdio.h>
#define PRINT(int) printf("%d",int)
int main()
{
int x=2;
PRINT(x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释我为什么它工作正常?是不是保留了关键字并且不能在C中用作变量名,或者这是C中的宏的一些例外?
在这种情况下,int不是变量(更正确:参数)名称,因为当然PRINT也不是函数 - 它是预处理器宏.
无论您作为宏定义的一部分编写什么,都只能由预处理器查看.当编译器看到已处理的源时,"int"名称仍然没有.
这类似于函数的形式参数所发生的情况:编译器可以看到这些名称,但是在完成源代码之后,它们的痕迹仍然保留在编译代码中(因此您需要在调试器中加载调试符号以"获取"这个信息回"".