Oracle Solaris Studio 12.2: C ユーザーガイド

4.6.1.3 疑わしい言語構造

lint は、プログラマの意図には反するが、言語構造上は正しい箇所についても報告します。次に例を示します。


unsigned x;
if (x < 0) ...

常に失敗します。一方、


unsigned x;
if (x > 0) ...

これは次のように指定するのと同じことです。


if (x != 0) ...

最初の例は意図したものではない可能性があります。lint は、負の定数または 0unsigned 変数との疑わしい比較を知らせます。unsigned 変数を負数のビットパターンと比較するには、その負数を unsigned にキャストします。


if (u == (unsigned) -1) ...

または、接尾辞 U を使用します。


if (u == -1U) ...

int fun()
{
    int a, b, x, y;
    (a = x) && (b == y);
}

if (x & a == 0) ...

この式は、次のように評価されます。


if (x & (a == 0)) ...

これは、ユーザーの意図とは異なる可能性が高いものです。-h を指定して lint を起動すると、診断のものは無効になります