爲什麼這是警告?我認爲在很多情況下,使用多字符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 –