除以C中宏定义的int会得到奇怪的结果

除以C中宏定义的int会得到奇怪的结果,c,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);

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

#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
0
0
变成

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

宏扩展后,您有

addr / 2 * 64
由于操作员进动,这是

32 * 64
可以在宏中添加括号

#define C (A * B)

仔细阅读运算顺序。这个问题似乎离题了,因为它是关于基本算术的。事实上,我认为他认为宏会将C展开为“128”,而不是“A*B”。因此,如果你犯了这个错误,这个Q/A是有用的。@Almo同样,这个问题是上百个相同问题的重复,其中一个问题出现在搜索“[c]奇怪宏”时结果的第一页。
32 * 64
#define C (A * B)