[英]C error: non-void function does not return a value in all control paths [-Werror,-Wreturn-type]
[英]C, error: control reaches end of non-void function [-Werror,-Wreturn-type]
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);
}
我不確定這個錯誤是什么意思? 以及如何解決?
函數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);
}
safe_quad_eval()
沒有return語句。 它應該是return (f(qa,qb..
?
如果我們查看gcc
手冊的警告選項部分,我們會看到以下有關-Wreturn-type
:
當函數定義的返回類型默認為int時發出警告。 還警告在返回類型不為void的函數中沒有返回值的任何return語句(從函數體末尾開始考慮返回沒有值),以及關於返回類型的函數中帶有表達式的return語句是空的。
在這種情況下, safe_quad_eval
被聲明為返回int
但是你沒有return
語句而沒有函數的結尾。 這可能會導致未定義的行為,如果您嘗試使用此類函數的返回值,則根據C99草案標准部分6.9.1
函數定義第12段說:
如果到達終止函數的},並且調用者使用函數調用的值,則行為是未定義的。
因此,您可能應該更改函數以return
值。
為了完整起見, -Werror
將導致編譯器將警告變為錯誤,從上面鏈接的手冊:
-Werror
將所有警告變為錯誤。
函數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);
}
我假設您要返回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
返回值可糾正錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.