簡體   English   中英

“Hello World”由於“return(0)”而未編譯?

[英]"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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM