GCC 编译器选项 -wno-four-char-constants 和 -wno-multichar

gil*_*_mo 5 gcc clang compiler-warnings gcc-warning

找不到有关 的任何文档-Wno-four-char-constants,但我怀疑它与-Wno-multichar. 我对么?

man*_*lio 6

它们是相关的,但不是同一件事。

使用-Wall --pedantic标志进行编译,分配:

int i = 'abc';
Run Code Online (Sandbox Code Playgroud)

产生:

警告:多字符字符常量 [-Wmultichar]

同时使用 GCC 和 CLANG,同时:

 int i = 'abcd';
Run Code Online (Sandbox Code Playgroud)

产生:

GCC 警告:多字符字符常量 [-Wmultichar]

CLANG 警告:多字符字符常量 [-Wfour-char-constants]


该标准(包含勘误TC1、TC2 和 TC3 的 C99 标准,第 6.4.4.4 小节 - 字符常量)指出:

包含多个字符(例如,'ab')、[...] 的整型字符常量的值是由实现定义的。

多字符始终解析为“int但是”,因为未指定将字符打包为一个的顺序int,所以多字符常量的可移植使用很困难(确切的值取决于实现)。

编译器在处理不完整的多字符(例如'abc')的方式上也有所不同。

有些编译器在左侧填充,有些在右侧填充,无论字节顺序如何(有些编译器可能根本不填充)。

能够接受完整多字符的可移植性问题的人可能无论如何都希望对不完整的多字符发出警告(-Wmultichar -Wno-four-char-constants)。