Странные конструкции
lint выявляет ряд конструкций, являющихся вполне корректными, но несколько странными. Предполагается, что сообщения, выдаваемые при этом, должны поощрять лучшее качество программ, более ясный стиль, а иногда и способствовать обнаружению ошибок. (Чтобы отменить эти проверки, используется опция -h). Например, в операторе
*p++;
* ничего не дает. Такая конструкция вызывает сообщение lint'а:
null effect
В следующем фрагменте программы
unsigned x; . . . if (x < 0) . . .
условие никогда не будет выполнено. В таком случае lint выдает сообщение
degenerate unsigned comparison
Аналогично, для того же x, проверка
if (x > 0) . . .
эквивалентна
if (x != 0) . . .
Поэтому lint спрашивает:
unsigned comparison with 0?
Если программа содержит нечто, подобное фрагменту
if (1 != 0) . . .
lint выдает сообщение
constant in conditional context
поскольку сравнение 1 с 0 дает неизменный результат.
В некоторых конструкциях lint выявляет свойства, связанные со старшинством операций. Ошибки, вызванные неправильным пониманием старшинства, могут быть замаскированы использованием пробелов и другими чисто внешними особенностями расположения операндов, что делает обнаружение подобных ошибок исключительно сложным. Например, операторы
if (x&077 == 0) . . .
и
x<<2 + 40
имеют, скорее всего, совсем не тот смысл, который имелся в виду. Лучшее решение - использовать в таких выражениях скобки; к этому и призывает соответствующее сообщение lint'а.