2017-11-15 29 views

答えて

1

これらは関連していますが、同じものではありません。

-Wall --pedanticフラグでコンパイル、割付:

int i = 'abc'; 

が生成:

警告:GCCとCLANG両方とマルチ文字文字定数-Wmultichar]

、while:

int i = 'abcd'; 

生成:

GCC警告:複数文字の文字定数-Wmultichar]

CLANG警告:複数文字の文字定数-Wfour-チャー定数]


標準(C99標準は、の角括弧 TC1、TC2およびTC3を含む、6.4.4.4項の文字定数)は、次のように述べています。

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

マルチcharは常にintに解決しかし、文字を1 intに充填される順序が指定されていないので、複数文字定数の携帯使用が(正確な値は、、実装が困難です依存性)。

また、コンパイラは、不完全な複数文字(たとえば、'abc')の処理方法が異なります。

いくつかのコンパイラは、エンディアンに関係なく、左側にいくつかのパッドがあります(一部のコンパイラはまったくパッドしないことがあります)。

完全なマルチcharの移植性の問題を受け入れる人は、不完全なもの(-Wmultichar -Wno-four-char-constants)の警告が必要な場合があります。

関連する問題