san*_*101 1 c macros c-preprocessor
#include<stdio.h>
#define a(x) (x * x)
int main()
{
int i = 3, j;
j = a(i + 1);
printf("%d", j);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么程序没有提供输出16.(我得到了输出7.)
我非常理解这一点,但如果程序是这样的:
#include<stdio.h>
#define a(x) (x * x)
int main()
{
int i = 3, j, k;
j = a(i++);
k = a(++i);
printf("%d\n%d", j, k);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
那么为什么上面的程序给出了以下输出:
9
49
Run Code Online (Sandbox Code Playgroud)
因为你做了一个糟糕的宏:
a(i + 1)
Run Code Online (Sandbox Code Playgroud)
扩展到
i + 1 * i + 1
Run Code Online (Sandbox Code Playgroud)
这相当于
i + i + 1
Run Code Online (Sandbox Code Playgroud)
要么
2 * i + 1
Run Code Online (Sandbox Code Playgroud)
使用括号:
#define a(x) ((x) * (x))
Run Code Online (Sandbox Code Playgroud)
然后你会把它扩展到
(i + 1) * (i + 1)
Run Code Online (Sandbox Code Playgroud)
哪能做到你想要的.