以下是我的内容,我想知道它是如何工作的以及它实际上做了什么。
#define NUM 5
#define FTIMES(x)(x*5)
int main(void) {
int j = 1;
printf("%d %d\n", FTIMES(j+5), FTIMES((j+5)));
}
它产生了两个整数:26和30。
它是如何做到的呢?
以下是我的内容,我想知道它是如何工作的以及它实际上做了什么。
#define NUM 5
#define FTIMES(x)(x*5)
int main(void) {
int j = 1;
printf("%d %d\n", FTIMES(j+5), FTIMES((j+5)));
}
printf("%d %d\n", j+5*5, (j+5)*5);
含义:
1+5*5 and (1+5)*5
既然还没有提到,解决这个问题的方法是按照以下步骤进行:
#define FTIMES(x) ((x)*5)
宏展开中x
周围的括号是为了避免操作符结合性问题。
在此之后,你的问题的答案是操作顺序:
FTIMES(j+5) = 1+5*5 = 26
FTIMES((j+5)) = (1+5)*5 = 30
#define NUM 5
#define FTIMES(x)(x*5)
int main(void)
{
int j = 1;
printf("%d %d\n", j+5*5,(j+5)*5);
}
如果你想修复它:
#define FTIMES(x) ((x) * 5)
预处理器将代码中所有的NUM替换为5,将所有的FTIMES(x)替换为x * 5。编译器然后编译代码。
这只是文本替换。
操作次序。
当 j=1 时,FTIMES(j+5) 的计算过程为:
1+5*5
结果为:
25+1
=26
如果改成 FTIMES((j+5)),那么它的计算过程变成:
(1+5)*5
6*5
30