qq_旗号
2015-11-05 10:35
#define POCKETMONEY 10 这里后面加上分号就不能运行是什么鬼?
#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)
另外,因为只是字符替换,#define不会做类型检查,所以如果你使用#define定义“函数”,调用时传错了参数,编译器在编译的时候是不会发现的,这就把可能的错误推到了运行时,甚至可能不容易发现。这样是不好的,错误越早发现越好,所以建议能不用 #define 就不用 #define。当然个人观点而已,就像goto语句一样,虽然很多人建议不用,不过即使啊Google,在Android的源码里也经常使用goto
C语言入门
926207 学习 · 20797 问题
相似问题