-Wextra真的有用吗?

hel*_*hod 19 gcc

我正在阅读gcc手册,特别是关于警告/错误标志的部分.在阅读关于-Wextra标志的部分后,我想知道它是否有用.它似乎抱怨似乎相当主观或品味的事情.我不是那些经验丰富的gcc,我只是不时地在大学里用一些小项目,所以对于所有经验丰富的C/C++(或者你使用gcc的任何语言),什么是-Wextra?

nc3*_*c3b 27

-Wextra,以及其他的东西意味着-Wtype-limits:

如果由于数据类型的范围有限,比较始终为true或始终为false,则发出警告,但不警告常量表达式.例如,警告是否将无符号变量与"0"或"> ="进行比较.-wextra也启用此警告.

我发现这非常有用.


Jos*_*sey 8

我通常添加-Wno-sign-compare-Wno-unused-parameter消除噪音.

暗示-Wuninitialized(带-O2选项)对我非常有帮助,但最初将它添加到您的代码库可能有点令人生畏.解决这个问题的一种方法是添加两个宏(看起来有些奇怪:等号是故意的):

#define ELIMINATE_GCC_WARNING = 0 // used to remove nuisance warnings
#define UNCHECKED_GCC_WARNING = 0 // not yet verified
Run Code Online (Sandbox Code Playgroud)

然后你可以快速消除gcc警告,并通过使用例如:

int foo UNCHECKED_GCC_WARNING;
Run Code Online (Sandbox Code Playgroud)

然后作为可选步骤返回并检查这些添加,并逐个更改为ELIMINATE_GCC_WARNING.这可能很慢.但如果你没有发现一些现有的错误,我会感到惊讶.

  • 我发现`-Wno-unused-parameter`很有用,特别是当旧的源代码经过数年的更改时,有时值最终会传递给甚至没有使用的嵌套函数。建议定义UNUSED。`#define UNUSED(x)UNUSED_ ## x __attribute __((__ unused __))`然后可以包装这样的参数...`void func(int a,int UNUSED(b)){...}`如果以后需要在GCC上使用该参数,则在不删除UNUSED()属性的情况下就不会发生这种情况。 (2认同)