lint 会标记那些不能表达程序员意图的各种合法构造。示例:
unsigned 变量总是具有非负值。因此测试:
unsigned x; if (x < 0) ... |
总是失败。测试:
unsigned x; if (x > 0) ... |
等效于:
if (x != 0) ... |
这可能不是预期的操作。lint 会标记 unsigned 变量与负常量或 0 的可疑比较。要将 unsigned 变量与负数的位模式进行比较,请将该变量的类型强制转换为 unsigned:
if (u == (unsigned) -1) ... |
或者使用 U 后缀:
if (u == -1U) ... |
lint 会标记用于预期出现副作用的上下文但没有副作用的表达式,即可能未表达程序员意图的表达式。它在应该出现赋值运算符的位置发现等号运算符(即预期出现副作用)时发出一个额外的警告:
int fun() { int a, b, x, y; (a = x) && (b == y); } |
lint 会提醒您注意给混合有逻辑运算符和按位运算符(特别是 &、|、^、<< 和 >>)的表达式加上括号,否则运算符优先级的误解会引起不正确的结果。例如,按位运算符 & 的优先级低于逻辑运算符 ==,所以表达式:
if (x & a == 0) ... |
求值如下:
if (x & (a == 0)) ... |