如何在C++中抑制个别警告?

Sle*_*led 1 c++ warnings compiler-warnings

首先,对不起,如果这是一个显而易见的问题,但我对C++很新.此外,这段代码原本不是我的,但我正在尝试清理它.


我正在寻找一种独立于编译器的方法来抑制特定线路的警告(最好).我有以下代码:

int MPtag::state_next( int i, int s ){
#if NGRAMS==2
    return s+1;
#elif NGRAMS==3
    return tag_at(i,0) * num_tags + s+1;
#elif NGRAMS>=4
    return tag_at(i,-1) * num_tags*num_tags + tag_at(i,0)*num_tags + s+1;
#endif
}
Run Code Online (Sandbox Code Playgroud)

NGRAMS目前设置为2.

G ++给了我一个警告(当然有适当的偏执选项)参数"i"未被使用.虽然这在技术上是正确的,但情况并非总是如此.我已经考虑过注释掉变量名,但是如果要更改NGRAMS,它会产生编译错误,直到取消注释; 这是不可取的.

相关问题最古老的答案提出了一个宏,但另一张海报说它不是编译器独立的.我读过#pragma warning但是AFAICT就是VS C++的东西.有没有正确的方法来做到这一点?

ta.*_*.is 7

对于那个特别的警告,你总是可以作弊:

#define UNREFERENCED_PARAMETER( x ) ( x )
Run Code Online (Sandbox Code Playgroud)

然后在你的代码中

int a( int b, int c )
{
    UNREFERENCED_PARAMETER( c );
    return b * b;
}
Run Code Online (Sandbox Code Playgroud)

  • 我使用 `#define UNUSED_VAR(x) (x)=(x)` 这不会让编译器抱怨该语句无效 (2认同)