一个关于宏定义的问题
#include<stdio.h>#define f(x) (x)*(x)
int main(void)
{
printf("%d\n",f(3+4));
}
#include<stdio.h>
#define f(x) x*x
int main(void)
{
printf("%d\n",f(3+4));
}
这两个结果为什么不相同呢?
搜索更多相关的解决方案:
定义
----------------解决方案--------------------------------------------------------
#include
#define f(x) (x)*(x) //因为你加了括号,f(3+4)==>(3+4)*(3+4)==>49
int main(void)
{
printf("%d\n",f(3+4));
}
#include
#define f(x) x*x
int main(void)
{
printf("%d\n",f(3+4));//这里你没有加括号,所以f(x+4)==>3+4*3+4==>19
}
这两个结果为什么不相同呢? [/quote]
----------------解决方案--------------------------------------------------------
呵呵,云天上了啊。
这个问题就象“(4+5)*(18-27)”和“4+5*18-27”类似。你说,他们相等吗?
----------------解决方案--------------------------------------------------------
所以说。有些时候宏很不安全。。
----------------解决方案--------------------------------------------------------