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

5

我找不到关于 -Wno-four-char-constants 的任何文档,但我认为它类似于 -Wno-multichar。我的想法正确吗?

1个回答

6

虽然相关,但并非同一概念。

使用-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)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接