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