我正在查看一些代码,我在宏中遇到以下行:
int foo = 0; (foo);
它编译得很好。事实上,似乎
0;
是C / C ++中的有效代码行。
我已经看过调试和发布版本中生成的程序集(在msvc上),它对程序集没有任何影响。我的测试很简单(有和没有(foo);
):
int main()
{
int foo = 0;
(foo);
return 0;
}
我的问题是为什么有人想要这样做?我确定(foo);
是宏的原因,但我不确定原因。
对于上下文,它所在的宏看起来像这样(我已经重命名了变量):
#define MY_MACRO int _foo = 0; (_foo); UINT _bar = CP_THREAD_ACP; (_bar); LPCWSTR _baz = NULL; (_baz); LPCSTR _thing = NULL; (_thing)
在代码中,它简称为
MY_MACRO;
//other code...
答案 0 :(得分:0)
正如Fred Larson在评论中所建议的那样,它可以用来抑制编译器警告。我试过这段代码:
int foo = 0;
foo;
我调试了代码并且编译器完全跳过了第二行,所以它似乎没有任何重要性。当然,如果您担心这些行会影响您的宏,您可以像我一样使用调试器逐步完成代码。
答案 1 :(得分:0)
这可能是宏观扩张的结果。
可能只是某个人很傻。
可能是抑制编译器警告。
在任何情况下,这样的陈述在语言中都是完全合法的,并且对程序没有实际影响。 任何有能力的编译器都会在编译期间删除它们。