我和我的同事正在学习一个测试,我们必须在那里分析 C 代码。翻看前几年的测试,看到如下代码,不是很懂:
#include <stdio.h>
#define SUM(a,b) a + b
#define HALF(a) a / 2
int main(int argc, char *argv[])
{
int big = 6;
float small = 3.0;
printf("The average is %d\n", HALF(SUM(big, small)));
return 0;
}
这段代码打印了 0,我们完全不明白……你能向我们解释一下吗?
非常感谢!
最佳答案
编译器的警告 ( format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘double’
) 提供了足够多的信息。您需要更正 format-specifier
,它应该是 %lf
,而不是 %d
,因为您正在尝试打印 double
值。
printf("The average is %lf\n", HALF(SUM(big, small)));
printf
将按照您告诉它的方式处理您指向的内存。在这里,它将表示浮点数的内存视为整数。因为两者的存储方式不同,所以您应该得到本质上是一个随机数。它不必总是 0
。关于在 C 中的宏中使用浮点数进行计算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40860139/