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