struct quad {
int a;
int b;
int c;
}
int f(const int a, const int b, const int c, const int x){
const int l = a*x*x + b*x + c;
return l;
}
int safe_quad_eval(const struct quad q, const int x){
(f(q.a,q.b,q.c,x)>INT_MAX)||(f(q.a,q.b,q.c,x)<(-INT_MAX)) ? INT_MIN : f(q.a,q.b,q.c,x);
}
我不确定这个错误是什么意思?以及如何解决它?
答案 0 :(得分:2)
函数int safe_quad_eval(...)
没有返回值。
你需要返回一个int。
也许你想要
int safe_quad_eval(const struct quad q, const int x){
return (f(q.a,q.b,q.c,x)>INT_MAX)||(f(q.a,q.b,q.c,x)<(-INT_MAX)) ? INT_MIN : f (q.a,q.b,q.c,x);
}
答案 1 :(得分:2)
safe_quad_eval()
没有return语句。应该是return (f(q.a,q.b...
吗?
答案 2 :(得分:2)
如果我们查看gcc
手册的Warning Options部分,我们会看到-Wreturn-type
的以下内容:
每当使用默认为int的返回类型定义函数时发出警告。还警告在返回类型不为void的函数中没有返回值的任何return语句(从函数体末尾开始考虑返回没有值),以及关于返回类型的函数中带有表达式的return语句是无效的。
在这种情况下,safe_quad_eval
被声明为返回int
,但是您没有return
语句而从函数的末尾开始。这可能导致未定义的行为,如果您尝试使用此类函数的返回值,则根据C99草案标准部分6.9.1
函数定义段 12 说:< / p>
如果到达了终止函数的},并且调用者使用了函数调用的值,则行为是未定义的。
所以你应该把你的功能改为return
一个值。
为了完整起见,-Werror
将导致编译器将警告变为错误,来自上面链接的手册:
-Werror
将所有警告变为错误。
答案 3 :(得分:1)
函数int
开头的safe_quad_eval
表示它应该返回一个整数值。但是,正如你所写的那样,它实际上并没有返回任何内容(它中没有return
语句。)
要解决此问题,请在其正文的开头添加return
:
int safe_quad_eval(const struct quad q, const int x){
return (f(q.a,q.b,q.c,x)>INT_MAX)||(f(q.a,q.b,q.c,x)<(-INT_MAX)) ? INT_MIN : f(q.a,q.b,q.c,x);
}
答案 4 :(得分:0)
我假设您要返回safe_quad_eval
中的值,因为返回类型被声明为int
,但您忘记了return
语句。添加return
应该会阻止编译器抱怨。
int safe_quad_eval(const struct quad q, const int x){
return (f(q.a,q.b,q.c,x)>INT_MAX)||(f(q.a,q.b,q.c,x)<(-INT_MAX)) ? INT_MIN : f(q.a,q.b,q.c,x);
}
error: control reaches end of non-void function
表示函数声明为非void(safe_quad_eval
期望在此情况下返回int
),但您没有从中返回值。添加int
返回值可以纠正错误。