如何关闭CDT(C代码)中逐行警告的静态代码分析警告?

如何关闭CDT(C代码)中逐行警告的静态代码分析警告?,c,eclipse,eclipse-cdt,C,Eclipse,Eclipse Cdt,我们有一个在Eclipse中使用CDT的项目。这是一个我们刚刚导入Eclipse的老项目,我想确保我们开始使用静态代码分析来发现任何奇怪之处 问题是,有很多行触发了我们想要忽略的警告,其中主要的是switch语句中的错误 我知道如何处理皮棉,但如何处理CDT?是否有一行注释可以放在行的正上方 示例:(“案例结束时无中断”) 你应该试试 //no break 在下一个案子之前。解决了它 我只是把我想忽略的警告中的文字添加到了断点的正上方 像这样: case enChC:

我们有一个在Eclipse中使用CDT的项目。这是一个我们刚刚导入Eclipse的老项目,我想确保我们开始使用静态代码分析来发现任何奇怪之处

问题是,有很多行触发了我们想要忽略的警告,其中主要的是switch语句中的错误

我知道如何处理皮棉,但如何处理CDT?是否有一行注释可以放在行的正上方

示例:(“案例结束时无中断”)

你应该试试

//no break
在下一个案子之前。

解决了它

我只是把我想忽略的警告中的文字添加到了断点的正上方

像这样:

      case enChC:
        ++nChannel;
        //No break at the end of case
      case enChD:
        ++nChannel;

这些设置位于窗口->首选项->C/C++->代码分析下。您可以自定义设置。例如,如果您在案例末尾选择了
No break
,则可以定义抑制警告的注释。默认情况下是“不间断”。因此,将警告信息复制/粘贴到您的案例中的注释中是很巧的:

正如您所看到的,文本不必完全匹配,而且似乎也不区分大小写

参考:当您在文件范围中自定义
未使用的变量时
可以定义应忽略的变量名称:

有两个神秘的预定义异常“@(#)”和“$Id”。不幸的是,我找不到任何官方文件,所以我去查阅了。检查程序似乎只是测试变量名是否存在任何指定的异常。如果是,则该警告将被抑制

除了EclipseCDT之外,还有一个流行的虚空铸造技巧。如果编译器警告未使用的变量,请将其强制转换为void。这个操作没有效果,所以是安全的,但是从编译器的角度来看,现在使用的是这个变量。我通常将其包装在宏中,以充分明确我在做什么,例如

#define UNUSED(var) (void)(var)

void foobar()
{
    int b;     // not used. 
    UNUSED(b); // now it's used
}

如前所述,在这种特定情况下,可以通过添加以下注释来解决:

//no break
或:

真正重要的是(不休息)

但是,在这个案例结束和下一个案例结束之间,你不能有更多的评论,否则它将不起作用。例如,下一种情况仍然会导致警告:

case enChC:
    ++nChannel;
    //No break
    //This second case decrease the value
  case enChD:
    ++nChannel;

我遇到了这个问题,我只想消除它们。 我尝试添加/*无中断*/,您应该确保在下一个“案例”之前添加它。 这就是我遇到的问题

这是我使用的解决方案:


您必须升级到Eclipse Oxygen.3(或.2)


从这些版本开始,只需使用“快速修复”即可抑制警告/标记。

我接受了您的答案,但我也希望忽略一些“未使用的变量声明”。有什么建议吗?谢谢。也可用作
/*无中断*/
/*案例结尾处无中断*/
。(我不能使用
/
注释,因为我仅限于C89。)我当然很想知道为什么eclipse的麻木螺母们认为“不间断”比30年前的“失败”要好。他们在想什么?@BruceK:在Eclipse中,你可以对消息进行个性化设置。默认值是
no break
,但我现在将其更改为
FALLTHROUGH
,效果很好@谢谢你。我已经学会了。这个问题与“他们在想什么?”有关,他们毫无理由地对一个有30年历史的皮棉传统进行了颠覆。是的,我可以通过足够的研究来解决这个问题。我们和无数其他人被迫做的研究。没必要。我来这里也有同样的问题。如果没有SE,我永远也找不到这种环境。默认情况下,在Eclipse中,如果在注释中的任何位置(在下一个case语句之前)有一个确切的字符串“no break”,那么它将删除警告。它不区分大小写,甚至“给我一个rhino breaker”都可以!Lol这个问题会吸引更多人的兴趣,用一个更具描述性的标题来描述switch语句中案例结尾处的break。@CraigMcQueen,谢谢你的提示,但我实际上是在问如何逐行关闭静态代码分析。休息只是我想关掉的一个警告的具体例子。每个人都专注于这个例子,但实际上这不是最初的问题。
//no break at the end of case
case enChC:
    ++nChannel;
    //No break
    //This second case decrease the value
  case enChD:
    ++nChannel;