# define 宏定义

1.在C/C++ 编程中,宏中所有的实参加上小括号,否则调用该宏时可能产生未知的结果;但是即使将宏中所有的实参加上了小括号,也会有些不可思议的事情:

#define call_with_max(a,b) f((a) > (b)  ? (a) : (b))
int a = 5;
int b = 0;
call_with_max( ++a , b);
call_with_max( ++a , b + 10);

c++在预编译阶段将调用宏的位置直接替换成定义的字符串,如上面的代码中定义的宏 ‘call_with_max(a,b)’,进行预处理时将
call_with_max( ++a , b)替换为 f((++a)>(b)?(++a):(b)); -- a 被累加了2次
call_with_max( ++a , b + 10) 替换为 f((++a)>(b+10)?(++a):(b+10)); -- a被累加1次

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。