除以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)