C prog错误:int之前的预期表达式

时间:2014-06-29 07:50:21

标签: 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'之前的预期表达式

4 个答案:

答案 0 :(得分:2)

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的边界。

答案 1 :(得分:0)

错误是因为int(a)Syntactically这是错误的。它应该是(int)(a)

答案 2 :(得分:0)

#define round(a) ((a-0.5)<int(a))?int(a):int(a+1)

括号是否位于错误位置应为

#define round(a) (((int)((a)-0.5))<(a))?(int)(a):(int)(a+1)

答案 3 :(得分:0)

问题是int(a)无效C.

按如下方式重新定义宏:

#define round(a) (((a)-0.5)<(int)(a))?(int)(a):(int)(a+1)

请注意,我还在a (a)-0.5周围添加了括号。

P.S。是什么原因使它成为一个宏而不是一个函数?