所以我花了最后几个小时来研究代码,试图找出错误的根源,结果发现我的错误不是别人,而是明显错误但编译器接受了:
if (a = b)
它应该在的地方
if (a == b)
你们会采取什么措施来防止这些令人沮丧的错误?我还应该注意哪些其他常见的“明显错误,但编译器不会抱怨”的错误?
大多数编译器都提供在这些情况下发出警告的选项。这些通常被称为“lint”警告,以早期程序的名称命名,以便为 C 源代码提供它们(早期的 C 编译器没有内置它们,但现在大多数都内置了)。您可以检查是否启用了编译器提供的所有警告。如果您的编译器不提供 lint 功能,请寻找一个好的 lint 工具。
许多人对文字数字使用
if(0 == var)
0 = x;
是编译器错误。对于if(a = b)
,我不知道任何通用的解决方案。避免拼写错误的另一个例子是在 for/while/if 块中放入大括号。我见过:
if(x)
doSomething();
somethingElse();
会导致问题,例如,如果开发人员没有注意,制表符/空格搞砸了,因此缩进错误或其他什么。删除
doSomething()
行,或向 if()
块添加内容需要更改其他行。更安全的是:
if(x)
{
doSomething();
}
somethingElse();
我的一个常见问题是在使用指针之前不检查它是否存在(不是 NULL)。这个问题在我的代码中造成了许多意外的中断。