为什么这是警告?我认为在很多情况下,使用多字符int常量而不是“无意义”数字或者使用相同值定义const变量时会更清楚。当解析wave/tiff /其他文件类型更清楚地将读取值与某些'EVAW','data'等比较,而不是相应的值。多字符常量警告
示例代码:
int waveHeader = 'EVAW';
为什么会出现这种给予警告?
为什么这是警告?我认为在很多情况下,使用多字符int常量而不是“无意义”数字或者使用相同值定义const变量时会更清楚。当解析wave/tiff /其他文件类型更清楚地将读取值与某些'EVAW','data'等比较,而不是相应的值。多字符常量警告
示例代码:
int waveHeader = 'EVAW';
为什么会出现这种给予警告?
According to the standard(§6.4.4.4/ 10)
包含多于一个 字符的整数字符常数的值(例如, 'AB'),[...]是实现定义。
long x = '\xde\xad\xbe\xef'; // yes, single quotes
这是有效的ISO 9899:2011 C.它编译没有与-Wall
gcc
下警告,“多字符常量”与-pedantic
警告。
多字符常量(例如“XY”)是有效的,虽然很少 有用 - 一个整数,他们让一个店几个字符(例如,4个 ASCII字符可以适合在32位整数,8位为64位)。 由于字符被打包到一个int中的顺序不是指定的 ,所以便携式使用多字符常量很困难。
为了便于携带,请不要在整数类型中使用多字符常量。
我不确定最后一句话的含义是什么;多字符常量总是具有整型(并且这种不带前缀的常量总是具有类型“int”)。 –
如果感到幸福你知道你在做什么,并能接受的便携性问题,海合会例如,你可以禁用命令行警告:
-Wno-multichar
我用这个我自己由于类似的原因,应用程序可以使用AVI和MP4文件标题。
即使您愿意查看您的实现定义的行为,多字符常量仍然随字节顺序而变化。
更好地使用(POD)struct {char [4]}; ...然后使用像“WAVE”_4cc这样的UDL轻松构建该类的实例
我无法理解您的问题。你能说清楚吗? – 2011-10-13 13:56:26
@ 0A0D我会试试:)对不起 – Felics
相关:http:// stackoverflow。com/questions/7497192/enum-constants-questions –