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

GCC Compiler options -wno-four-char-constants and -wno-multichar

找不到关于 -Wno-four-char-constants 的任何文档,但我怀疑它类似于 -Wno-multichar。我说得对吗?

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

使用 -Wall --pedantic 标志编译,赋值:

int i = 'abc';

产生:

warning: multi-character character constant [-Wmultichar]

同时使用 GCC 和 CLANG,同时:

 int i = 'abcd';

产生:

GCC warning: multi-character character constant [-Wmultichar]

CLANG warning: multi-character character constant [-Wfour-char-constants]


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

The value of an integer character constant containing more than one character (e.g., 'ab'), [...] is implementation-defined.

一个多字符总是解析为一个 int 但是,由于字符被打包到一个 int 中的顺序没有指定,多字符常量的可移植使用是困难的(确切的值是 依赖于实现的).

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

一些编译器在左边填充,一些在右边填充,不管字节顺序如何(一些编译器可能根本不填充)。

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