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

c.f*_*lou 13 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;
Run Code Online (Sandbox Code Playgroud)

gko*_*s90 26

你应该试试

//no break
Run Code Online (Sandbox Code Playgroud)

在下一个案例之前.

  • 我肯定很想知道为什么日食中的麻木决定"没有休息"比*30*岁的"FALLTHROUGH"更好.他们在想什么? (2认同)

djf*_*djf 10

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

CDT静态代码分析

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

请参阅有关未使用变量的后续问题:自定义时Unused variable in file scope,可以定义应忽略的变量名称:

在此输入图像描述 有两个神秘的预定义异常"@(#)"和"$ Id".不幸的是我找不到任何官方文档,所以我去查看源代码.看起来检查器只是测试变量名是否有contains()任何指定的异常.如果是,则警告被抑制.

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

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

void foobar()
{
    int b;     // not used. 
    UNUSED(b); // now it's used
}
Run Code Online (Sandbox Code Playgroud)