【问题标题】:"Hello World" not compiling due to "return(0)"?由于“return(0)”,“Hello World”没有编译?
【发布时间】:2021-10-17 01:24:46
【问题描述】:

简单的问题:

为什么我的代码看起来像这样编译:

#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() 函数不返回值。编译器错误很明显。
  • 如果您放弃&lt;unistd.h&gt; 并使用printf("3"); 输出,您的程序更多可移植到具有C 编译器的所有环境(Windows、在线编译器、智能冰箱、Lunar着陆器,克林贡太空船,...);不仅仅是具有 POSIX 接口的环境。

标签: c compiler-errors return return-value function-definition


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        对于初学者来说这个电话

        write (1, "3", 3);
        

        至少会调用未定义的行为,因为字符串文字 "3" 仅包含 2 个字符(不是您认为的 3),即它作为字符数组存储为 { '3', '\0' }

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

        来自 C 标准(6.8.6.4 的 return 语句)

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

        因此编译器会发出与您插入的语句相关的错误

        return(0);
        

        你可以直接写

        return;
        

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

        您似乎想插入语句

        return(0);
        

        main点赞

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

        虽然在main 中可以省略。

        【讨论】:

          【解决方案5】:

          这是因为你的功能

          void hello()
          

          被定义为“void”类型 - 也就是说,您将其定义为不返回任何内容的东西。你可以添加

          return;
          

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

          int hello()
          

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

          【讨论】:

            【解决方案6】:

            您声明 hello 返回“void”,即什么也不说,但您却试图返回 0。

            【讨论】:

              【解决方案7】:

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

              不建议从返回类型不是void 的函数返回值失败,即使编译器允许这样做。 main 函数是一个例外。如果main没有返回值,则假定返回值为0。

              【讨论】:

              • Re“如果main没有返回值,则假定返回值为0”:具体来说,如果控制到达main的关闭},则返回零。如果main 没有返回值,因为它没有返回(例如,无限期地继续),则没有返回值。
              猜你喜欢
              • 1970-01-01
              • 2012-01-20
              • 1970-01-01
              • 1970-01-01
              • 2014-07-19
              • 2013-04-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多