我正在查看一些代码,我在宏中遇到以下行:
int foo = 0; (foo);
Run Code Online (Sandbox Code Playgroud)
它编译得很好.事实上,似乎
0;
Run Code Online (Sandbox Code Playgroud)
是C/C++中的有效代码行.
我已经看过调试和发布版本中生成的程序集(在msvc上),它对程序集没有任何影响.我的测试很简单(有和没有(foo);):
int main()
{
int foo = 0;
(foo);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么有人想要这样做?我确定(foo);在宏观中是有原因的,但我不确定为什么.
对于上下文,它的宏看起来像这样(我已经重命名了变量):
#define MY_MACRO int _foo = 0; (_foo); UINT _bar = CP_THREAD_ACP; (_bar); LPCWSTR _baz = NULL; (_baz); LPCSTR _thing = NULL; (_thing)
Run Code Online (Sandbox Code Playgroud)
在代码中,它简称为
MY_MACRO;
//other code...
Run Code Online (Sandbox Code Playgroud)