雖然大部分警告不會(huì)影響代碼的運(yùn)行(小部分可能造成影響的是類似于強(qiáng)制轉(zhuǎn)換的警告,需要自行確保該轉(zhuǎn)換有意義)耕渴,但是程序員應(yīng)該有義務(wù)保持代碼的良好規(guī)范邮破,以方便后續(xù)的功能迭代。
此處記錄一些編譯警告壶谒,不定時(shí)更新...
-Wreorder
warning: ‘xxx::xxx’ will be initialized after [-Wreorder]
- 產(chǎn)生原因:如果代碼中成員變量的初始化順序和它們實(shí)際執(zhí)行時(shí)初始化順序不一致云矫,給出此警告。
- 解決辦法:按聲明順序進(jìn)行初始化汗菜。
warning: ‘typename xxx::xxx’ [-Wreorder]
when initialized here [-Wreorder]
- 產(chǎn)生原因:變量默認(rèn)初始化位置不當(dāng)让禀。
- 解決辦法:把構(gòu)造函數(shù)里這個(gè)變量的默認(rèn)初始化刪掉,改為在類聲明中初始化陨界。
-Wuninitialized
warning: ‘xxx’ is used uninitialized in this function [-Wuninitialized]
- 產(chǎn)生原因:指針沒有指向可用的內(nèi)存地址或沒有分配地址巡揍。
- 解決辦法:為該指針分配一定的內(nèi)存空間,如把
char* str;
改成char* str = oldStr;
或char* str = new char[20];
菌瘪。
-Wsign-compare
warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
- 產(chǎn)生原因:有符號(hào)數(shù)與無符號(hào)數(shù)進(jìn)行比較吼肥。
- 解決辦法:把有符號(hào)數(shù)強(qiáng)制轉(zhuǎn)換成無符號(hào)數(shù)
static_cast<unsigned long>(xxx)
,可以用typeid(xxx).name()
查看變量具體類型麻车。