我和我的同事正在学习一个测试,我们必须在那里分析 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/

10-12 13:31