有关预定义的问题
这个代码:
#include<stdio.h>
#define f(x) x*x
int main()
{
int a = 6, b = 2, c;
c = f(a) / f(b);
printf("%d\n", c);
}
为什么结果是36。不应该是36/4 = 9的吗。有点疑惑,所以来这问问大家了
[解决办法]
改成 (x)*(x)试试
不加括号相当于 6*6/2*2就是36
[解决办法]
//宏只是展开c = f(a) / f(b);c = a*a / b*b;//你应该这样定义#define f(x) (x*x)
[解决办法]
宏定义虽然和函数有一定的相似性,,但是宏定义只是在宏定义出现的地方进行替换。而函数则是存储在一定的区域中,有一个指针指向函数,每次出现函数调用时访问此处的内存。
c = f(a) / f(b);
替换成c=a×a/c×c;
结果就出来了。。
[解决办法]
应该这样
#include<stdio.h>#define f(x) ((x)*(x))int main(){ int a = 6, b = 2, c; c = f(a) / f(b); printf("%d\n", c);}