課程
/后端開(kāi)發(fā)
/C
/C語(yǔ)言入門
#define POCKETMONEY 10? 這里后面加上分號(hào)就不能運(yùn)行是什么鬼?
2015-11-05
源自:C語(yǔ)言入門 2-7
正在回答
#define 本質(zhì)上是字符的替換 ?
比如
#define?A?1 //?... int?a?=?A;??//?編譯的時(shí)候編譯器就做了替換,這里變成了?int?a?=?1;
如果你加了 分號(hào),就變成了這種情況
#define?A?1; //?... int?a?=?A;?//?替換后就成了?int?a?=?1;;??這當(dāng)然是錯(cuò)的
所以說(shuō) #define 用的時(shí)候要注意,尤其是定義“函數(shù)”時(shí),注意加括號(hào),否則容易有歧義
所以C++中,建議使用 const 來(lái)定義全局的常量,使用 typedef 定義類型別名,使用函數(shù)定義函數(shù)(C++可以使用functional模板函數(shù),以及auto類型推斷,很方便。當(dāng)然因?yàn)镃++不斷的加新的特性,變得復(fù)雜臃腫,也有很多人不喜歡C++,比如Linux大神Linus喜歡純C)
qq_旗號(hào) 提問(wèn)者
另外,因?yàn)橹皇亲址鎿Q,#define不會(huì)做類型檢查,所以如果你使用#define定義“函數(shù)”,調(diào)用時(shí)傳錯(cuò)了參數(shù),編譯器在編譯的時(shí)候是不會(huì)發(fā)現(xiàn)的,這就把可能的錯(cuò)誤推到了運(yùn)行時(shí),甚至可能不容易發(fā)現(xiàn)。這樣是不好的,錯(cuò)誤越早發(fā)現(xiàn)越好,所以建議能不用 #define 就不用 #define。當(dāng)然個(gè)人觀點(diǎn)而已,就像goto語(yǔ)句一樣,雖然很多人建議不用,不過(guò)即使啊Google,在Android的源碼里也經(jīng)常使用goto
舉報(bào)
C語(yǔ)言入門視頻教程,帶你進(jìn)入編程世界的必修課-C語(yǔ)言
1 回答#include <stdio.h> #define POCKETMONEY int main() { POCKETMONEY = 10; printf("小明今天又得到%d元零花錢\n", POCKETMONEY); return 0; }
2 回答#define POCKETMONEY 10; 為什么這后面加了分號(hào)就報(bào)錯(cuò)了??
2 回答#define POCKETMONEY 10 //定義常量及常量值 10 后面不應(yīng)該有分號(hào)么?
1 回答請(qǐng)問(wèn)為什么 #define POCKETMONEY 10 結(jié)尾不能加";"分號(hào)?
1 回答pocketmoney后面為什么不能加個(gè)=?,只能pocketmoney 10,而不能pocketmoney=10 ?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2015-11-05
#define 本質(zhì)上是字符的替換 ?
比如
如果你加了 分號(hào),就變成了這種情況
所以說(shuō) #define 用的時(shí)候要注意,尤其是定義“函數(shù)”時(shí),注意加括號(hào),否則容易有歧義
所以C++中,建議使用 const 來(lái)定義全局的常量,使用 typedef 定義類型別名,使用函數(shù)定義函數(shù)(C++可以使用functional模板函數(shù),以及auto類型推斷,很方便。當(dāng)然因?yàn)镃++不斷的加新的特性,變得復(fù)雜臃腫,也有很多人不喜歡C++,比如Linux大神Linus喜歡純C)
2015-11-05
另外,因?yàn)橹皇亲址鎿Q,#define不會(huì)做類型檢查,所以如果你使用#define定義“函數(shù)”,調(diào)用時(shí)傳錯(cuò)了參數(shù),編譯器在編譯的時(shí)候是不會(huì)發(fā)現(xiàn)的,這就把可能的錯(cuò)誤推到了運(yùn)行時(shí),甚至可能不容易發(fā)現(xiàn)。這樣是不好的,錯(cuò)誤越早發(fā)現(xiàn)越好,所以建議能不用 #define 就不用 #define。當(dāng)然個(gè)人觀點(diǎn)而已,就像goto語(yǔ)句一樣,雖然很多人建議不用,不過(guò)即使啊Google,在Android的源碼里也經(jīng)常使用goto