c语言 - "Hello World"由于"return(0)"而未编译?



简单问题:

为什么我的代码会编译成这样:

#include <unistd.h>
#include <stdio.h>
void hello()
{
write (1, "3", 3);

}
int main ()
{
hello();
}

输出:3

当我在write (1, "3", 3);之后的行中添加return(0);时,为什么它不编译?

我得到的错误信息是:

2function.c:7:2: error: void function 'hello' should not return a value [-Wreturn-type]
return(0);

谢谢!

返回类型为void的函数表示它不返回值。因此,如果这样的函数使用带有值的return语句,则违反了函数的定义。

从返回类型不是void的函数返回值也是不可取的,即使编译器允许。但是main函数是个例外。如果main没有返回任何值,则假定返回值为0。

void没有任何意义。当函数返回类型为void时,不应该返回任何内容。或者您可以只写return;

这是因为您的函数

void hello()

被定义为类型";无效"-也就是说,你把它定义为不返回任何东西的东西。您可以添加

return;

直到最后,但这只是因为它没有返回值。如果您想在函数"中返回0;你好";您需要声明要返回的数据类型,而不是void,即

int hello()

这将允许您返回任何int,例如返回0;

您声明hello以返回"void";,也就是说什么都不说,但是您正在尝试返回0。

对于初学者,此调用

write (1, "3", 3);

调用未定义的行为,至少是因为字符串文字"3"只包含2个字符(而不是您认为的3),也就是说,它作为字符数组存储为{ '3', '' }

您将函数hello声明为具有返回类型void。此类函数不应返回值。

来自C标准(6.8.6.4返回语句)

1带有表达式的return语句不应出现在返回类型为void的函数不带表达式只能出现在返回类型为void的函数中。

因此编译器会针对插入的语句发出错误

return(0);

相反,你可以写

return;

尽管对于这样一个只包含一个语句的函数来说意义不大。

你似乎想插入声明

return(0);

在类似main的中

int main( void )
{
hello();
return 0;    
}

尽管在CCD_ 16中它可以被省略。

void表示当您将函数声明为void时,不返回任何内容。但如果你想返回一些东西,请将返回类型更改为int,float

要从函数返回任何内容,必须在函数名称之前指定返回类型。void没有任何意义,您正试图从hello()返回一个整数。这就是你犯错的原因。

#include <unistd.h>
#include <stdio.h
int hello(){
write (1, "3", 3);
return 0; 
}
int main (){
hello();
return 0;
}

最新更新