这是程序:
#include <stdio.h>
#define round(a) ((a-0.5)<int(a))?int(a):int(a+1)
int main() {
double a = 5.2;
int m = round(a);
printf("%d", m); }
它显示错误:'int' 之前的预期表达式
最佳答案
round
是标准 C 库保留的名称,因此将您的宏称为该名称是未定义的行为(即使您不包含 math.h
) .
您的算法可以更好地表达为:
#define my_round(a) ( (int)((a) + 0.5) )
它还有一个好处是只评估一次它的参数。
最好使用内联函数:
inline int my_round(double d)
{
return d + 0.5;
}
请注意,如果 a
大致超出 INT_MIN
、INT_MAX
的范围,这两个选项都会导致未定义的行为。如果它处于关键环境中,您应该让内联函数在转换为 int 之前检查 d
的边界。
关于C程序错误: expected expression before int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24474143/