Jea*_*uys 8 c++ xcode clang suppress-warnings visual-c++
在将大量C++代码从Visual Studio(2008)移植到Xcode(4.4+)时,我会遇到如下行:
UNUSED_ALWAYS(someVar);
Run Code Online (Sandbox Code Playgroud)
在UNUSED_ALWAYS(x)(通过UNUSED(x))宏扩展到x这似乎沉默的Visual C++就好了.但这对Clang来说还不够.
对于Clang,我通常使用该#pragma unused x指令.
在UNUSED_ALWAYS和UNUSED宏在人工定义windows.h这是我控制包含了一些工具来帮助的Xcode编译的Windows的东西头.
有没有办法定义UNUSED(x)扩展到#pragma unused x?我试过这个,Clang没有接受:
#define UNUSED(x) #pragma unused(x)
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
#define UNUSED(x) (void)(x)
Run Code Online (Sandbox Code Playgroud)
这似乎有效.我错过了什么吗?
(void)x;
Run Code Online (Sandbox Code Playgroud)
很好; 一直为我工作.您通常不能将宏扩展为#pragma,尽管通常会有一个稍微不同的pragma语法可以从宏生成(_Pragma on gcc and clang,__pragma on VisualC++).
尽管如此,我实际上并不需要在C++中使用(void)x,因为你不能给函数参数指定一个名称来指示你不使用它:
int Example(int, int b, int)
{
... /* only uses b */
}
Run Code Online (Sandbox Code Playgroud)
工作得非常好.
是的 - 您可以将这种方法用于 GCC 和 Clang:
#define MON_Internal_UnusedStringify(macro_arg_string_literal) #macro_arg_string_literal
#define MONUnusedParameter(macro_arg_parameter) _Pragma(MON_Internal_UnusedStringify(unused(macro_arg_parameter)))
Run Code Online (Sandbox Code Playgroud)
尽管我的确实(void)为 clang 定义了方法,但似乎 Clang 现在支持_Pragma上面的 stringify 和方法。_Pragma是C99。
| 归档时间: |
|
| 查看次数: |
6127 次 |
| 最近记录: |