0

次のようなコードで PC-Lint 8.00x を実行しています。

typedef union
{
    struct
    {
        unsigned int blue  : 5;
        unsigned int green : 6;
        unsigned int red   : 5;
    };
    unsigned short color_value;
} Color_Type;

Color_Type my_color;
unsigned char blue;

blue = (unsigned char)my_color.blue;  /* Lint messages occur here */

PC-Lint は次のエラー メッセージを返します。

Error 40: Undeclared identifier 'blue'

Error 63: Expected an lvalue

コードは期待どおりにコンパイルおよび実行されます。 これは匿名の構造体が原因であると想定していますが、その想定は正しいですか? もしそうなら、この特定の状況でこれらのメッセージを抑制するにはどうすればよいですか? 私は現在、「options.lnt」ファイル内のメッセージを抑制しています。ローカルのコーディング慣行では、Lint メッセージを抑制するためにコードに直接コメントを入れることを禁止しているためです。

4

1 に答える 1

1

これを投稿しているときに、むかしむかし+fanフラグを設定したことを思い出し、このケースをカバーする必要があると考えました。PC Lint のドキュメントをもう一度見てみることにしたところ、フラグが匿名共用体に関する警告のみを抑制することがすぐにわかりました。

+fas「options.lnt」ファイルにもフラグを設定する必要がありました。

PC Lint を再度実行したところ、気になっていた警告はすべて抑制されました。実際、警告は匿名構造体が原因でした。

于 2013-11-25T18:41:55.183 に答える