【发布时间】:2012-07-03 05:24:22
【问题描述】:
实际上我有一个代码,它有串行的宏
我在这里想知道的是它们是如何在代码上真正工作的,因为我想通过看到下面的结果来编写自己的预处理器,我真的很惊讶
#define int char //macro1
#define char float //macro2
#define float int //macro3
main()
{
int x;
char y;
float z;
}
我期望在预处理后文件中的代码是所有三个变量 x,y,z 作为 int,int,int
但令人惊讶的是(对我来说)类型没有改变,为什么会这样?谁能详细解释一下宏在预处理过程中如何发挥作用
【问题讨论】:
-
您是否只尝试过其中之一?就像没有其他两个的'#define float int'?
-
有各种在线资源(如gcc.gnu.org/onlinedocs/cpp/Macros.html)提供了预处理器如何工作的深入解释,特别是与宏相关的。您可能会发现阅读它们很有用...
-
这些宏太可怕了。我希望它们不会在实际代码中使用。要回答您的问题,这可能与您输入宏的顺序有关。尝试颠倒定义的顺序,看看您会得到什么。
-
@RoeeGavirel 我已经尝试过了,但有趣的是发生了多个宏,我真正怀疑宏是如何在代码上工作的,每个宏是检查整个代码还是动态发生宏替换
-
@reuben 谢谢,这肯定会对我的项目有所帮助
标签: c c-preprocessor