小编ott*_*tto的帖子

预处理器宏作为其他宏的参数

下面的C++代码编译并作为GCC上的程序员工作(4.0.4)

#define FOO(x,y,z) ((x)*(y)*(z))
#define BAR(x) FOO(x,1)
#define BAZ 3,7

int main()
{
    return BAR(BAZ); /* interpreted as return ((3)*(7)*(1)); */
}
Run Code Online (Sandbox Code Playgroud)

但是,宏在Microsoft Visual C++ Express 2010上导致错误:

main.cpp(7):警告C4003:宏'
FOO'main.cpp(7)的实际参数不够:错误C2059:语法错误:')'

问题似乎是Microsoft编译器在内部处理BAR宏时,不会将BAZ宏扩展为可用作宏FOO的两个独立参数的参数.

根据标准,哪个编译器正确处理了这种情况?

c++ macros legacy-code c-preprocessor visual-studio-macros

12
推荐指数
1
解决办法
1747
查看次数