1

是否有我可以使用的通用抑制警告?

问题是有时我可能使用一个编译器版本 (gcc) 构建,然后我有一个合作伙伴使用一些常见的东西但使用不同的编译器。所以警告#是不同的。

我能想到的唯一方法是制作一个在文件中定义的宏,我将传入一些通用值:

SUPPRESS_WARNING_BEGIN(NEVER_USED)
//code
SUPPRESS_WARNING_END

那么该文件将具有以下内容:

#if COMPILER_A
    NEVER_USED = 245
#endif

#if COMPILER_B
    NEVER_USED = 332
#endif


#define SUPPRESS_WARNING_BEGIN(x) /
     #if COMPILER_A
        //Compiler A suppress warning x
     #endif

     #if COMPILER_B
        //Compiler B suppress warning x
     #endif

#define SUPPRESS_WARNING_END /
     #if COMPILER_A
        // END Compiler A suppress warning
     #endif

     #if COMPILER_B
        // END Compiler A suppress warning
     #endif

不知道有没有更简单的方法?我也知道理想情况下我们都只会使用相同的编译器,但不幸的是这不是一个选择。只是试图找到最简单的方法来支持这样的事情,并希望有一种更简单的方法然后上面提到。

谢谢

4

1 回答 1

3

没有便携的方法可以做到这一点。不同的编译器以不同的方式(例如,等)执行此#pragma warning操作#pragma GCC diagnostic

最简单和最好的做法是编写在编译器处于任何警告级别时都不会生成任何警告的代码。

如果您的目标是抑制有关未使用变量的警告,我建议使用宏:

#define UNUSED(x) ((void)sizeof(x))
...
void some_function(int x, int y)
{
    // No warnings will be generated if x is otherwise unused
    UNUSED(x);
    ....
}

sizeof运算符在编译时进行评估,并且强制转换void不会产生任何结果,因此任何编译器都会将UNUSED语句优化为什么都没有,但会考虑要使用的操作数。

GCC 也有unused属性`

// No warnings will be generated if x is otherwise unused
int x __attribute__((unused));
于 2012-11-13T19:58:24.103 回答