我们在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;
答案 0 :(得分:26)
你应该试试
//no break
在下一个案例之前。
答案 1 :(得分:9)
这些设置位于Window - >下。偏好 - > C / C ++ - >代码分析。您可以自定义设置。例如,如果选择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
}
答案 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)
假设您已开启此功能
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;
}
}
我展示了一张照片,展示了日食本身的影响。
答案 6 :(得分:-2)
我遇到过这个问题,我只想消除它们。 我试图添加/ *没有中断* /,你应该确保它在下一个“案例”之前添加。 这是我遇到的问题
这是我使用的解决方案:
答案 7 :(得分:-3)
要禁用烦人的通知,您需要转到偏好设置 - > C / C ++ - >编辑器,然后取消选中“突出显示非活动代码”,“在键入时显示问题”等选项。这有帮助。