C程序错误: expected expression before int

标签 c compiler-errors

这是程序:

#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_MININT_MAX 的范围,这两个选项都会导致未定义的行为。如果它处于关键环境中,您应该让内联函数在转换为 int 之前检查 d 的边界。

关于C程序错误: expected expression before int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24474143/

相关文章:

c - 回到循环 C 的开始

c - 如何将 char * 转换为 BSTR?

c - 在 C 中实现 Stack 时出现奇怪的错误

ios - iOS 上的 PJSIP,编译器错误 "undeclared type ` pj_thread_t`"

c# - 非静态字段需要一个对象

c - 使用周期计数计算吞吐量

C:段错误:在 NetBeans (OS X) 上运行,但在 Linux 上不运行

c - 将 sigaction 与定时器信号一起使用时遇到问题

c - 出现错误 C2440

php - token 不匹配异常