【发布时间】:2017-11-15 10:16:19
【问题描述】:
在-Wno-four-char-constants 上找不到任何文档,但我怀疑它类似于-Wno-multichar。我说的对吗?
【问题讨论】:
标签: gcc clang compiler-warnings gcc-warning
在-Wno-four-char-constants 上找不到任何文档,但我怀疑它类似于-Wno-multichar。我说的对吗?
【问题讨论】:
标签: gcc clang compiler-warnings gcc-warning
它们是相关的,但不是一回事。
使用-Wall --pedantic 标志编译,赋值:
int i = 'abc';
产生:
警告:多字符字符常量 [-Wmultichar]
同时使用 GCC 和 CLANG,而:
int i = 'abcd';
产生:
GCC 警告:多字符字符常量 [-Wmultichar]
CLANG 警告:多字符字符常量 [-Wfour-char-constants]
标准(包含更正 TC1、TC2 和 TC3 的 C99 标准,第 6.4.4.4 小节 - 字符常量)指出:
包含多个字符的整数字符常量的值(例如,
'ab'),[...] 是实现定义的。
多字符总是解析为int,但是,由于没有指定字符被打包成int的顺序,多字符常量的便携使用是困难的(确切的值是实现依赖)。
编译器在处理不完整的多字符(例如'abc')的方式上也有所不同。
有些编译器在左边填充,有些在右边,不管字节序(有些编译器可能根本不填充)。
可以接受完整多字符的可移植性问题的人可能无论如何都希望对不完整的多字符发出警告 (-Wmultichar -Wno-four-char-constants)。
【讨论】: