1. ホーム
  2. c++

[解決済み】多文字の定数警告について

2022-02-23 20:21:02

質問内容

なぜ警告なのですか?意味不明な数値の代わりに複数文字のint型定数を使ったり、同じ値のconst変数を定義する方が分かりやすい場合が多いと思います。wave/tiff/その他のファイルタイプをパースするとき、読み取った値を対応する値ではなく、いくつかの 'EVAW' や 'data' などと比較する方がより明確です。

サンプルコードです。

int waveHeader = 'EVAW';

なぜ警告が出るのですか?

解決方法は?

規格によると (§6.4.4.4/10)

複数の文字定数を含む整数文字定数の値。 文字(例:'ab')、[...]は実装定義です。

long x = '\xde\xad\xbe\xef'; // yes, single quotes

これは有効なISO 9899:2011 Cであり、以下のように警告なしでコンパイルされます。 gcc-Wall で「複数文字定数」の警告が表示されます。 -pedantic .

から ウィキペディア :

複数文字定数(例:'xy')は、ほとんど使われませんが、有効です。 これは、1つの整数に複数の文字を格納できるようにするものです。 ASCII 文字は 32 ビットの整数に、8 文字は 64 ビットの整数に収まります)。 文字を1つのintに格納する順番は決まっていません。 を指定する必要があるため、複数文字定数のポータブルな使用は困難である。

移植性のために、整数型に複数文字定数を使わないでください。