[英]"Hello World" not compiling due to "return(0)"?
簡單的問題:
為什么我的代碼編譯時看起來像這樣:
#include <unistd.h>
#include <stdio.h>
void hello()
{
write (1, "3", 3);
}
int main ()
{
hello();
}
Output:3
為什么當我添加return(0);
時它不編譯? 在write (1, "3", 3);
?
我收到的錯誤消息是:
2function.c:7:2: error: void function 'hello' should not return a value [-Wreturn-type]
return(0);
謝謝!
返回類型為void
的 function 表示它不返回任何值。 因此,如果這樣的 function 使用帶值的return
語句,則違反了 function 的定義。
從 function 返回一個返回類型不是void
的值也是不可取的,即使編譯器允許它。 然而main
的 function 是個例外。 如果main
沒有返回值,則假定返回值為 0。
void
沒有任何意義。 當您的 function 返回類型為 void 時,您不應返回任何內容。 或者你可以只寫return;
.
這是因為你的 function
void hello()
被定義為“void”類型——也就是說,您將其定義為不返回任何內容的東西。 你可以加
return;
到最后,但這只是因為它沒有返回值。 如果您想在 function“hello”中返回 0,則需要聲明要返回的數據類型,而不是 void,即。
int hello()
然后將允許您返回任何 int,例如 return 0;
您聲明 hello 以返回“void”,也就是說什么也沒有,但您卻試圖返回 0。
對於初學者來說,這個電話
write (1, "3", 3);
調用未定義的行為至少是因為字符串文字"3"
僅包含 2 個字符(不是您認為的3
),它被存儲為字符數組{ '3', '\0' }
。
您將 function hello
聲明為具有返回類型void
。 這樣的 function 應該沒有返回值。
來自 C 標准(6.8.6.4 返回語句)
1帶有表達式的 return 語句不應出現在返回類型為 void 的 function 中。 沒有表達式的 return 語句只能出現在返回類型為 void 的 function 中。
因此編譯器會發出與您插入的語句相關的錯誤
return(0);
相反,你可以只寫
return;
盡管對於這樣一個僅包含一個語句的 function 來說意義不大。
看來你想插入語句
return(0);
main
喜歡
int main( void )
{
hello();
return 0;
}
盡管在main
中它可以被省略。
void 表示當您將 function 聲明為 void 時,您什么都不返回,您不能返回任何東西。 但是如果你想返回一些東西,將返回類型更改為int,float
等
要從 function 返回任何內容,您必須在 function 名稱之前指定返回類型。 void 沒有任何意義,您正試圖從 hello() 返回 integer。 這就是你出錯的原因。
#include <unistd.h>
#include <stdio.h
int hello(){
write (1, "3", 3);
return 0;
}
int main (){
hello();
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.