main()返回一个整数? 我目前正在阅读C++中的函数。它说它们是“使您能够将应用程序的内容划分为功能单元的构件,这些功能单元可以按照您选择的顺序调用。调用函数时,通常会向调用函数返回一个值。” 然后继续说,MIN()被编译器识别为C++应用程序的起点,并且必须返回int(整数)。

main()返回一个整数? 我目前正在阅读C++中的函数。它说它们是“使您能够将应用程序的内容划分为功能单元的构件,这些功能单元可以按照您选择的顺序调用。调用函数时,通常会向调用函数返回一个值。” 然后继续说,MIN()被编译器识别为C++应用程序的起点,并且必须返回int(整数)。,c++,main,C++,Main,我不知道“必须返回整数”是什么意思。根据我(extrementlimited)的经验,int main()是应用程序的开始。但是“必须返回一个int”是什么意思呢?。这也与我不理解“通常向调用函数返回一个值”交织在一起。是的,main应该总是返回一个int,这可以用来显示程序是否成功运行,通常0表示成功,非零值表示某种失败 例如,在Linux中,您可以在bash脚本中调用程序,在此脚本中,对程序的返回状态运行不同的命令。这意味着,在main()的签名中,返回类型是int: int main();

我不知道“必须返回整数”是什么意思。根据我(extrementlimited)的经验,int main()是应用程序的开始。但是“必须返回一个int”是什么意思呢?。这也与我不理解“通常向调用函数返回一个值”交织在一起。

是的,
main
应该总是返回一个
int
,这可以用来显示程序是否成功运行,通常
0
表示成功,非零值表示某种失败


例如,在Linux中,您可以在bash脚本中调用程序,在此脚本中,对程序的返回状态运行不同的命令。

这意味着,在
main()
的签名中,返回类型是
int

int main();
int main(int argc, char const *argv[]);
#include <cstdlib>
#include <iostream>

int foo()
{
  return 42;
}

int main()
{
  int answer = foo();
  std::cout << "The answer to Life, the Universe and Everything is...\n"
    << answer << "!\n";
  return 0;
}
现在的问题是,您将从
main()
返回什么值。返回值实际上是退出状态,它向运行时指示
main()
执行成功还是失败

在Linux中,我通常根据情况返回
EXIT\u SUCCESS
EXIT\u FAILURE
。这些是由
定义的宏

根据:

EXIT_SUCCESS和EXIT_FAILURE宏扩展为一个整数表达式,并指示程序执行状态

  Constant                   Explanation
  EXIT_SUCCESS   successful execution of a program
  EXIT_FAILURE   unsuccessful execution of a program

<>虽然在C或C++编程时可能出现,主< <代码>实际上并不是发生的第一件事。通常,C或C++运行库中的某个地方是对<代码>主< <代码>的调用,它启动程序。当程序完成并从<代码>主< /代码>返回时,它将返回一个值(在C++中,如果不指定某个内容,编译器将自动添加<代码>返回0 ),并且该返回值用于表示程序的“成功”。p> 在Unix/Linux等系统中,它被用作
$?
,因此在运行程序后,您可以
echo$?
查看“结果”是什么-0表示“顺利”,其他值用于“失败”。在windows中,批处理脚本等中有一个
ERRORLEVEL
变量,可用于查看最后一个命令的结果

编辑:如果您的代码调用另一个程序,例如通过Windows中的CreatProcess,或Unix风格操作系统中的
fork()/exec()
(或几乎任何操作系统中的C运行时函数
spawn
和同级),则
main
的返回值是新进程完成并可用于所属进程。结束编辑


因为,即使在C++中,<>代码>主< /C>是一个“C”样式的函数,如果你改变了返回类型,它仍然有相同的名字,所以链接器/编译器不能“检测”它有错误的返回类型,如果你声明“代码>Valuy主())/代码>,<代码> STD::String主()/<代码>或<代码>浮点主(),就会出现一些奇怪的东西。
或除<代码> int()/<代码>之外的其他东西,它仍然会编译,但是代码调用<代码>主< /代码>中的代码将是未定义的行为,这意味着“几乎任何事情都可能发生”。

< P>就像在数学中,C++函数返回值。C++中的所有函数必须精确地指定返回的值类型,并且每个函数必须只返回一种类型的东西。在某些情况下,“一种类型的东西”可能是什么,它用C++表示,关键字为“代码>空隙< /代码>。 每个函数都必须声明它返回的内容。这是通过函数声明完成的。以下是几个例子:

int foo();
void bar();
string baz();
int main();
4函数声明<代码> Foo< /Calp>返回<代码> int <代码>,代码> bar >代码>返回任何内容,<代码> BAZ返回<代码>字符串(在C++标准库中声明),<代码>主< /COD>返回INT.< 每个函数不仅必须声明它返回的内容,还必须返回该类型的内容。如果函数返回
void
,则可以编写:

void bar()
{
    return;
}
…或者什么都不做:

void bar()
{
}
如果函数返回的不是
void
,则必须有一个
return
语句返回该类型的内容:

int foo()
{
  return 42;
}
如果您声明一个函数来返回一种类型的东西,但又试图返回另一种类型的东西,那么必须有一种方法来隐式地将您试图转换的东西转换为函数声明要返回的东西。如果没有可能的隐式转换,您的程序将无法编译。考虑:

int foo()
{
  return "foobar rulez!";
}
int main()
{
}
在这里,
foo
被声明为返回一个
int
,但我试图返回一个字符串(不是标准库中的
string
,而是一个旧的C样式
const char*
字符串。“foobar rulez!”这里被称为字符串文本。)

编写代码来提供我前面提到的隐式转换是可能的,但是除非您确切知道为什么要这样做,否则最好不要现在就卷入其中


如何处理函数返回的值?同样,就像数学一样,您可以在程序的其他地方使用这些值

#include <cstdlib>
#include <iostream>

int foo()
{
  return 42;
}

int main()
{
  int answer = foo();
  std::cout << "The answer to Life, the Universe and Everything is...\n"
    << answer << "!\n";
  return 0;
}

好的,回到
main
的所有业务

<代码>主<代码>是C++中的函数。有一些关于 >主< /代码>的东西使它与C++中的其他函数相比是特殊的,其中两个是:

  • 每个程序必须只有一个名为
    main()
    (在全局范围内)的函数
  • 该函数必须返回一个
    int
  • 还有一件事
    #include <cstdlib>
    #include <iostream>
    
    int theAnswer = 0;    
    
    void DeepThought()
    {
      theAnswer = 42;
    }
    
    int foo()
    {
      return theAnswer;
    }
    
    int main()
    {
      DeepThought();
    
      int answer = foo();
      std::cout << "The answer to Life, the Universe and Everything is...\n"
        << answer << "!\n";
      return 0;
    }
    
    int main()
    {
    }
    
    echo $?