繁体   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