在我正在处理的产品中发现了几个令人讨厌的错误,所有这些错误都与switch语句中的无意中“跌倒”有关。在C代码中发现“穿透”
现在,我想更进一步 - 我希望检测大量C代码中的switch语句。 我只能使用Linux和gcc 5.6进行编译(所以没有叮当声或更新的gcc;这是因为我们项目的目标架构不存在新的gcc)。
这是一个代码,而告吹:
switch(m_loadAnimSubCt){
case 0:
case 1:
// Do something
break;
case 2:
case 3:
case 4:
// Do something
break;
}
这是秋天穿通代码:我
switch(m_loadAnimSubCt){
case 0:
case 1:
// Do something but fall through to the other cases
// after doing it.
case 2:
case 3:
case 4:
// Do something else.
break;
}
您应该研究术语* statical analysis *和* linter *。 –
我做过了,它看起来很少涉及穿透。我知道最新的gcc中有一个开关,但我不能使用该版本的gcc。 – VividD
你的两个例子都有“fall throughs” - 情况'0'落入情况'1'。无论如何,如果你想检测这样的事情,写一些解析你的源文件的代码,并尖叫是否符合你想要的条件。 C编译器通常不会诊断这些事情,因为代码是有效的 - 所以你编写代码来自己做。 – Peter