我找不到关于 -Wno-four-char-constants
的任何文档,但我认为它类似于 -Wno-multichar
。我的想法正确吗?
我找不到关于 -Wno-four-char-constants
的任何文档,但我认为它类似于 -Wno-multichar
。我的想法正确吗?
虽然相关,但并非同一概念。
使用-Wall --pedantic
标志进行编译时,这个作业:
int i = 'abc';
产生以下警告:
警告:多字符字符常量[-Wmultichar]
在GCC和CLANG中都会出现这种情况,而且:
int i = 'abcd';
产生的结果:
GCC警告:多字符字符常量[-Wmultichar]
CLANG警告:多字符字符常量[-Wfour-char-constants]
标准(包括 C99 标准中的勘误 TC1、TC2 和 TC3,子部分 6.4.4.4 - 字符常量)规定:
包含超过一个字符的整数字符常量(例如
'ab'
)的值是由实现定义的。
多字符常量始终解析为 int
类型,但是由于将字符打包成一个 int
的顺序未指定,因此使用可移植的多字符常量很困难(确切的值取决于实现)。
此外,编译器在处理不完整的多字符时(如 'abc'
)也有所不同。
一些编译器在左侧填充,一些在右侧填充,无论字节顺序如何(有些编译器可能根本不填充)。
即使可以接受完整的多字符常量的可移植性问题,某些人还是希望对不完整的常量发出警告 (-Wmultichar -Wno-four-char-constants
)。