我们不能为#define写一个可执行语句吗?

时间:2013-11-22 17:41:39

标签: c macros c-preprocessor

为什么我会得到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作为答案。

2 个答案:

答案 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)