思考:宏與常/變量的選擇?
* 宏:只是在預(yù)處理器里進(jìn)行文本替換苞轿,沒有類型茅诱,不做任何類型檢查食棕,編譯器可以對(duì)相同的字符串進(jìn)行優(yōu)化慌随。只保存一份到 .rodata 段闷旧。甚至有相同后綴的字符串也可以優(yōu)化诗充,你可以用GCC 編譯測(cè)試,"Hello world" 與 "world" 兩個(gè)字符串伴挚,只存儲(chǔ)前面一個(gè)垃环。取的時(shí)候只需要給前面和中間的地址军浆,如果是整形坯门、浮點(diǎn)型會(huì)有多份拷貝微饥,但這些數(shù)寫在指令中。占的只是代碼段而已古戴,大量用宏會(huì)導(dǎo)致二進(jìn)制文件變大
* 變量:共享一塊內(nèi)存空間欠橘,就算項(xiàng)目中N處用到,也不會(huì)分配N塊內(nèi)存空間现恼,可以被修改肃续,在編譯階段會(huì)執(zhí)行類型檢查
* 常量:共享一塊內(nèi)存空間,就算項(xiàng)目中N處用到叉袍,也不會(huì)分配N塊內(nèi)存空間始锚,可以根據(jù)const修飾的位置設(shè)定能否修改,在編譯階段會(huì)執(zhí)行類型檢查
具體使用可以參考下面第一篇文章