我想知道为什么当在宏中定义分母时,这个程序似乎没有正确地进行整数除法。
#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
答案 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)