上海笔试三
请说明一下宏#define max(a,b)(a>b?a:b)有什么隐患?
答:
http://www.zybang.com/question/8ddcda0b24a608a02f905130e7afe46a.html
因为宏定义是在预编译阶段把宏的内容拷贝到源代码的相应位置。
如果#define max(a,b) a>b?a:b这样写的话,那么如下表达式:
max(a,b)+1
展开就是:
a>b?a:b+1
冒号后面就变成了b+1,自然和作者当初的愿望(算完max再加1)就违背了,所以正确写法是:
#define max(a,b) ((a)>(b)?(a):(b)) 。
关键词:预编译,内容拷贝,展开,运算符优先级