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

问题描述 投票:12回答:7

我们在Eclipse中有一个使用CDT的项目。这是我们刚刚导入Eclipse的旧项目,我想确保我们开始使用静态代码分析来查找任何奇怪的东西。

问题是,有很多行会触发我们想要忽略的警告,其中主要是在switch语句中的漏洞。

我知道如何为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;
c eclipse eclipse-cdt
7个回答
26
投票

你应该试试

//no break

在下一个案例之前。


9
投票

这些设置位于Window - > Preferences - > C / C ++ - > Code Analysis下。您可以自定义设置。例如,如果选择No break at the end of case,则可以定义抑制警告的注释。默认情况下,这是“没有休息”。因此巧合地将警告消息复制/粘贴到您案例中的评论中:

正如您所看到的,文本不必是完全匹配,它也不区分大小写。

参考your follow-up question about unused variables:当您自定义Unused variable in file scope时,您可以定义应忽略的变量名称:

有两个神秘的预定义异常“@(#)”和“$ Id”。不幸的是我找不到任何官方文档,所以我去了the source。看起来检查器只是测试变量名称contains()是否有任何指定的异常。如果是,则警告被抑制。

在Eclipse CDT之外,有流行的虚空铸造技巧。如果编译器警告未使用的变量,则将其强制转换为void。此操作无效,因此它是安全的,但从编译器的角度来看,现在使用变量。我通常将它包装在一个宏中,以便清楚地表明我正在做的事情,例如

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

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

3
投票

解决了它。

我刚刚将警告中的文字添加到了我想要忽略的位置,直到上面的中断位置。

像这样:

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

2
投票

正如已经说过的那样,在这种特殊情况下,可以通过添加注释来解决:

//no break

要么:

//no break at the end of case

真正重要的是(没有休息)。

但是,要求您在本案例的结尾与下一个案例之间没有更多的评论,否则它将无效。例如,下一个案例仍然会产生警告:

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

0
投票

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

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


-2
投票

我遇到过这个问题,我只想消除它们。我试图添加/ *没有中断* /,你应该确保它在下一个“案例”之前添加。这是我遇到的问题

这是我使用的解决方案:


-3
投票

要禁用恼人的通知,您需要转到首选项 - > C / C ++ - >编辑器,然后取消选中“突出显示非活动代码”,“键入时显示问题”等选项。希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.