在C中除以宏定义的int给出了奇怪的结果

时间:2014-11-03 22:02:24

标签: c

我想知道为什么当在宏中定义分母时,这个程序似乎没有正确地进行整数除法。

#include <stdio.h>
#define A 2
#define B 64
#define C A * B

int main() {
     int addr = 64;
     int idx = addr / C;
     printf("C=%d\n", C);
     printf("%d\n", idx);
     printf("%d\n", addr / 128);
     return 0;
}

我的电脑输出:

C=128
2048
0

预期产出:

C=128
0
0

2 个答案:

答案 0 :(得分:3)

int idx = addr / C;

变为

int idx = addr / A * B; // or 64/2 * 64 == 32*64

答案 1 :(得分:0)

宏扩展后,你有

addr / 2 * 64

由于运算符优先级为

32 * 64

您可以在宏中添加括号

#define C (A * B)