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