0

Gimpel Software の PC-lint と Flexelint には、"971: Use of 'char' without 'signed' or 'unsigned'"というルールがあり、signedness を指定せずにプレーンcharタイプを使用することは禁止されています。

http://www.gimpel.com/html/pub/msg.txt

これは見当違いだと思います。を整数型として使用する場合charは、署名を明示的に指定するのが理にかなっていますが、テキスト文字に使用する場合はそうではありません。などの標準ライブラリ関数はprintf、 plain へのポインターを取得し、 orのchar使用は型の不一致です。もちろん、型間でキャストすることはできますが、それはまさに lint が防ごうとしている種類の間違いにつながる可能性があります。signedunsigned char

charプレーンタイプに対するこの lint ルールは間違っていますか?

4

2 に答える 2

3

PC Lint が 900 ~ 999 (および C++ の場合は 1900 ~ 1999) の範囲で提供するメッセージは、「選択ノート」と呼ばれ、デフォルトではオフになっています。これらは、特定の方法で制限のあるコーディング ガイドラインがある場合に使用することを目的としています。次に、潜在的な違反を見つけるために、これらのメモを 1 つ以上有効にすることができます。実際の開発作業で 9xx メッセージをすべて有効化した人はいないと思います。

あなたは正しいですchar:それは実際の文字に(ほとんど常に)バイトを使用することです。ただし、acharは C コンパイラによって符号付きまたは符号なしとして扱われます。C++ の場合、は と の両方とcharは異なります。unsigned charsigned char

私が働いてきた多くの組み込み C 環境では、プレーンcharが許可されていないというコーディング規則があるのが通例でした。そのとき、この PC Lint メッセージがアクティブになります。他のライブラリとのインターフェースなどの例外は、明示的に許可する必要があり、Lint コメントを使用して個々のメッセージを抑制していました。

于 2012-11-29T05:26:54.447 に答える
0

彼らがあなたに選択を強制することを選択した理由は、C標準が選択しないためsignedだと思います。unsignedC 標準状態charunsigned char、およびsigned charは、3 つの固有の型です。

たとえば gcc はデフォルトを作成しますsignedが、フラグで変更できます -funsigned-char

したがって、IMOはノーと言うでしょう。ルールに対するルールは間違っていません。C仕様を引き締めようとしているだけです。

于 2012-09-20T17:14:41.143 に答える