C:#define用法

以下脚本的输出是20.但任何人都可以详细说明为什么会这样,而不是110

#include #define MAX 10 #define MAXLEN MAX+1 int main() { printf("%d", MAXLEN * 10); getchar(); return 0; } 

由于MAX为10, MAXLEN为10 + 1,打印10 + 1 * 10即20。

宏扩展逐字替换字符串,这就是为什么在定义字符串时必须使用括号。 例如:

 #define MAXLEN (MAX+1) 

考虑一下它扩展到了什么

 MAXLEN * 10 == MAX+1 * 10 

当你考虑运算符优先权给出时

 MAX + (1 * 10) == 10 + (1 * 10) == 10 + 10 == 20 

你可能想要

 #define MAXLEN (MAX+1) 

代替。

 MAXLEN * 10 => MAX + 1 * 10 => 10 + (1 * 10) => 20