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

时间:2013-06-05 09:13:03

标签: c eclipse eclipse-cdt

我们在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;

8 个答案:

答案 0 :(得分:26)

你应该试试

//no break

在下一个案例之前。

答案 1 :(得分:9)

这些设置位于Window - >下。偏好 - > 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 有两个神秘的预定义异常" @(#)"和" $ Id"。不幸的是,我找不到任何官方文档,所以我去了the source。看起来检查器只是测试变量名contains()是否有任何指定的异常。如果是,则警告被禁止。

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

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

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

答案 2 :(得分:3)

解决了它。

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

像这样:

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

答案 3 :(得分:2)

如前所述,在这种特殊情况下,可以通过添加评论来解决:

//no break

或:

//no break at the end of case

真正重要的是(不休息)。

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

2021 年更新

  • 版本:2021-03 (4.19.0)
  • 版本号:20210312-0638

假设您已开启此功能

window -> Preferences ->(您的代码示例)C/C++ -> Code Analysis -> No break at end of case

如果你去Customize Selected...,你会得到“Comment text to suppress the problem [...]”,它声明哪个数据流实际上只会改变效果但仍然不会解决问题。

相关行在文件 org.eclipse.cdt 中,如下所示:

<块引用>

org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes=>{RUN_ON_FULL_BUILD=>true,RUN_ON_INC_BUILD=>true,RUN_ON_FILE_OPEN=>false,RUN_ON_RUN_FILE_SAVE=>false,RUN_AS_true,YOU_ON =>true},suppression_comment=>"@suppress(\"否 在案例结束时中断\")",no_break_comment=>"no break",last_case_param=>false,empty_case_param=>false,enable_fallthrough_quickfix_param=>false}

  • 在我的示例中使用此代码将适用于以下代码。

  • 注意注释的内容无关紧要,但它必须包含与Eclipse本身包含的设置相对应的相同片段

  • 此外,将注释放在 } 字符之后很重要,除非它是单个参数 case

  • Eclipse 仍会报告该问题,并且无法通过在设置中启用错误报告以任何方式避免这种情况,但它将不再在 case

    中的每一行下划线
          switch(next) {
              case 0: {
                  if(true) {
                      //Do stuff...
                  } else {
                      break;
                  }
                  next = 1;
              }
              // ThiS Is The Line that CAUSE N"no break////////"  
              case 1: {
                  if(true) {
                      //Do stuff...
                  } else {
                      break;
                  }
                  next = 2;
              }
              case 2: {
                  if(true) {
                      //Wont do stuff...
                      //It will break here
                      break;
                  } else {
                      next = 3;
                  }
              }
    

我展示了一张照片,展示了日食本身的影响。

enter image description here

答案 6 :(得分:-2)

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

这是我使用的解决方案:

答案 7 :(得分:-3)

要禁用烦人的通知,您需要转到偏好设置 - &gt; C / C ++ - &gt;编辑器,然后取消选中“突出显示非活动代码”,“在键入时显示问题”等选项。这有帮助。