我有一个令人讨厌的拼写错误浪费了我的时间和同事的时间,它是这样的:
for (i = 0; i < blah; i++); // <- I had a semi-colon here, that's the bug!
{
// Some awesome logic here
}
首先,这是非常尴尬的,其次,我不应该重复这一点。我对C相对比较新。在Java中,我想我可以使用FindBugs来捕获这些错误,我应该使用什么工具进行C代码?棉绒?
答案 0 :(得分:15)
是的,PC-Lint可能是最好的工具。
答案 1 :(得分:7)
除了Lykathea's PC-Lint suggestion之外,如果提高编译器的警告级别,您还可以获得更好(或至少更多)的诊断。类似/W4
或-Wall
虽然我不确定你的特定问题是否会被捕获(即使启用了所有警告,MS VC也似乎没有标记它)。我认为这是因为当作为循环控制表达式的副作用完成工作时,for
循环不是一个不常见的习惯用法。
答案 2 :(得分:4)
过去从我的头脑中拯救了我的一些事情:
如果(3 == bla)而不是(bla == 3),请使用,因为如果拼错并输入(3 = bla),编译器会抱怨。
使用所有警告开关。你的编译器应该警告你这样的空语句。
尽可能使用断言并进行防御性编程。努力使你的程序尽早失败,你会看到这样的弱点。
不要试图绕过编译器或操作系统已经实施的任何安全措施。它们也是为了您的编程而易于使用。
答案 3 :(得分:4)
答案 4 :(得分:3)
答案 5 :(得分:2)
GCC拥有Lint通过warning flags内置的大部分功能。
答案 6 :(得分:0)
像Eclipse这样的任何良好的GUI编程环境(“IDE” - 集成开发环境)都会在这种情况下生成警告。
答案 7 :(得分:0)
一个好的语法高亮显示器会使这样的一些案例更加明显。
答案 8 :(得分:0)
我建议看看你是否有enforce MISRA standards的能力。它们是经过深思熟虑和许多规则编写的,这些规则对于编译器来说很容易检查。例如,我使用的规则要求所有NOP命令都有自己的行。这意味着当你放一个;在循环语句结束时,它将通过一个错误说明它不在它自己的行上。
答案 9 :(得分:0)
QA·C是C的另一个很好的静态分析工具。
答案 10 :(得分:-1)
在这个(旧)版本的How to Shoot Yourself In the Foot以及网络上的许多其他版本中, C 始终是允许最简单程序的语言。在 C 中编程时,您必须记住这一点并小心。如果您需要保护,请选择其他语言。
对于Bjarne Stroustrup(C ++)本人来说,这句话是attributed。致(错)引用:
“C让你轻松拍摄自己的脚”