【发布时间】:2014-04-29 19:08:55
【问题描述】:
根据this question的回答,以下代码是合法的:
#define three 3
#define nine three*3
int main()
{
std::cout << nine;
return 0;
}
当然,它编译并运行良好。但是,对上述问题的回答还指出,应注意此类#define 指令的顺序,并且应在它们之前定义将在其他#defines 中使用的指令。但是下面的代码:
#define nine three*3
#define three 3
int main()
{
std::cout << nine;
return 0;
}
也编译和运行良好,它打印“9”。
我的编译器让我轻松了吗,或者使用其他#defines 的#defines 的顺序确实无关紧要?在更复杂的项目上编译会失败吗?
值得一提的是,上面提到的问题是关于 C,而我的代码是 C++。这就是(假定的)行为差异的来源吗?
【问题讨论】:
-
查看 Chris Dodds 在链接问题中的回答。
-
@erenon 哦,确实,它更深入地了解了这个机制。很好,你指出了。
-
一个更复杂的项目并不意味着更复杂的宏。您可以获得具有复杂宏的小项目和具有简单宏的大项目。
标签: c++ c-preprocessor operator-precedence