为什么我会得到27?不能#define
采用可执行语句5 + 2?
#include<stdio.h>
#include<conio.h>
#define x 5+2
void main()
{
int i;
i=x*x*x;
printf("%d",i):
getch();
}
输出:
27
我应该得到343作为答案。
答案 0 :(得分:1)
首先,这是不是可执行语句,它是表达式。不,它不应该是343,因为表达式没有括号。因此,乘法优先于加法,因此被评估的表达式是
5+2*5+2*5+2
是
5+(2*5)+(2*5)+2 = 27
这个小例子说明了宏的危险。您应始终将表示表达式的宏的内容括起来。此外,您应该始终将宏表达式的参数括起来。
答案 1 :(得分:0)
宏很棘手,因为它们不是函数,只是文本替换。因此,您的表达式变为:
i=5+2*5+2*5+2;
解决方案:使用常量,或将宏包装在括号中
#define x (5+2)