MrZ*_*man 5 c c++ c-preprocessor
我正在查看一些代码,我在宏中遇到以下行:
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)
正如 Fred Larson 在评论中建议的那样,它可以用来抑制编译器警告。我尝试了这段代码:
int foo = 0;
foo;
Run Code Online (Sandbox Code Playgroud)
我调试了代码,编译器完全跳过了第二行,所以它似乎没有做任何重要的事情。当然,如果您担心这些行会影响您的宏,您可以像我一样使用调试器单步调试代码。
| 归档时间: |
|
| 查看次数: |
230 次 |
| 最近记录: |