2013-06-05 143 views
10

我们有一个在Eclipse中使用CDT的项目。这是一个我们刚刚导入到Eclipse中的旧项目,我想确保我们开始使用静态代码分析来发现任何奇怪的东西。如何关闭CDT(C代码)中的逐行警告的静态代码分析警告?

事情是,有一堆行触发警告,我们只是想忽略,主要是在switch语句中的fallthrough。

我知道如何为lint做这件事,但对于CDT呢?是否有单行的评论,我可以放在行的上方?

例子:( “在案件结束无中断”)

case enChA: 
    nChannel++; 
    // I want to ignore this fallthrough  
    case enChB:  
    nChannel++; 
    // And this one... 
    case enChC: 
    nChannel++; 
    // And this one... 
    case enChD: 
    nChannel++; 
    // do some more stuff... 
    break; 
+0

这个问题可能会引起更多的兴趣,并提供一个更具描述性的标题,这个标题引用switch语句中的case结尾处的break。 –

+0

@CraigMcQueen,感谢您的提示,但我实际上是在问如何关闭一行一行的静态代码分析。休息只是我想要关闭的警告的一个具体示例。每个人都关注这个例子,但这实际上并不是最初的问题。 –

回答

21

你应该下一个case之前尝试

//no break 

+0

我接受了你的答案,但我也想忽略一些“未使用的变量声明”。有关这样做的任何提示? –

+0

谢谢。也可以作为'/ * no break * /'或'/ *在case * /'结束时不中断。 (我不能使用''//评论,因为我只限于C89。) –

+0

我肯定会好奇的知道为什么日食中的麻木坚果决定“不休息”比* 30 *年的“下通”。他们在想什么? –

3

解决了它。

我刚刚添加了我想要忽略的警告中的文本,以便立即在上面突破。

像这样:

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

你可以检查它是否适用于“不休息”? – gkovacs90

+1

我来到这里有同样的问题。没有SE,我永远不会找到这个设置。在Eclipse中默认情况下,如果在注释中通常会出现中断的位置(紧接下一个case语句之前)的任意位置有确切的字符串“no break”,它将删除该警告。它不区分大小写,甚至“给我一个犀牛破坏者”的作品! LOL – dslake

-3

要禁用恼人的通知,你需要去首选项 - > C/C++ - >编辑,然后取消选择说“突出显示激活代码”选项,“显示你输入的问题“等。希望这有助于。

+3

这不是我想要的。我想关闭每个警告的特定实例,而不是所有实例。令人讨厌的警告很重要,例如,有时候你想要通过一个案例,而其他时间则是一个错误,这就是为什么警告首先出现的原因。 –

8

这些设置位于窗口 - >首选项 - > C/C++ - >代码分析。您可以自定义设置。例如,如果您选择No break at the end of case,则可以定义抑制警告的评论。默认情况下它是“不中断”。那么巧合复制/粘贴警告消息到评论你的情况的工作:

CDT static code analysis

正如你可以看到文本不必精确匹配,它似乎并没有区分大小写无论是。

参考your follow-up question about unused variables:在自定义Unused variable in file scope你可以定义变量名应该被忽略:

enter image description here 有两个神秘的预定义异常“@(#)”和“$标识”。不幸的是我找不到任何官方文件,所以我去看the source。它看起来像检查器只是测试一个变量名称contains()任何指定的例外。如果是,则警告被抑制。

除了Eclipse CDT,还有流行的void-casting技巧。如果编译器警告一个未使用的变量,将其转换为void。这个操作没有效果,所以它是安全的,但是从编译器的角度来看,这个变量现在被使用了。我通常将它包装在一个宏中以清楚地表明我在做什么,例如

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

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

因为是已经说了,在这种特殊情况下,是可以解决添加评论:

//no break 

或:

//no break at the end of case 

真正重要的是(无间断)。

但是,还需要您在本案结束和下一次之间没有更多评论,否则它将无法工作。例如,下一个案例仍然会导致警告:

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

我遇到了这个问题,我只是想消除它们。 我试着添加/ * no break * /,你应该确保它在下一个“case”之前被添加。 这是我所遇到的

这个问题是我使用的解决方案:

0

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

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