为了账号安全,请及时绑定邮箱和手机立即绑定

#define POCKETMONEY 10

#define POCKETMONEY 10  这里后面加上分号就不能运行是什么鬼?

正在回答

2 回答

#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)

0 回复 有任何疑惑可以回复我~
#1

qq_旗号 提问者

非常感谢!么么哒(づ ̄ 3 ̄)づ
2015-11-05 回复 有任何疑惑可以回复我~

另外,因为只是字符替换,#define不会做类型检查,所以如果你使用#define定义“函数”,调用时传错了参数,编译器在编译的时候是不会发现的,这就把可能的错误推到了运行时,甚至可能不容易发现。这样是不好的,错误越早发现越好,所以建议能不用 #define 就不用 #define。当然个人观点而已,就像goto语句一样,虽然很多人建议不用,不过即使啊Google,在Android的源码里也经常使用goto

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

#define POCKETMONEY 10

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信