4

有没有办法从 C++ 中的主函数返回字符串?我在下面提到示例程序

string main(int argv, char* argc[])
{
  .
  .
  return "sucess";
}
4

5 回答 5

9

标准说:

3.6.1 主函数[basic.start.main]

2/ 实现不应预定义主要功能。该功能不得重载。它应该有一个 int 类型的返回类型,否则它的类型是实现定义的。所有实现都应允许

  • () 的函数返回 int
  • (int, 指向 char 指针的指针)返回 int的函数

作为主要的类型。[...]

所以不,你必须返回一个int。

从您对帖子的评论中,您似乎只想在标准输出上输出一个字符串,然后您可以执行以下操作:

#include <iostream>
int main()
{
    std::cout << "Success" << std::endl;
    // No need for return 0; it is implicit in C++
}

正如 Kerrek SB 在评论中所说,return 0;C++ 中隐含了 (标准§ 3.6.1 /5):

main[...]如果控制在没有遇到语句的情况下到达末尾return,效果就是执行

return 0;
于 2013-10-07T07:44:26.780 回答
4

不,你不能,你必须总是返回一个int. 更深入地思考,一个字符串对于shell程序来说是很难处理的:什么时候释放内存,返回什么样的字符串等等。)

但是,您可以使用or写入标准输出标准错误。当您希望控制台应用程序输出类似字符串的数据时,这是正常的做法。std::coutstd::cerr

通常,您然后依靠您的 OS shell 将程序的标准输出定向到另一个程序的输入(unix 使用管道|)。

于 2013-10-07T07:44:54.333 回答
4

不,它不符合标准。您必须返回一个 int 以便向调用者显示程序是如何退出的(很好,有错误?)。

你为什么要返回一个字符串?

于 2013-10-07T07:43:04.950 回答
2

您可能的意思是写入标准输出

#include <cstdio>

int main()
{
    // ...

    std::puts("success");

}   // no "return", success is implicit in C++

这是流程通信数据的标准方式之一,许多工具都适合以这种方式使用。

于 2013-10-07T07:46:33.813 回答
1

不,您不能在 C++ 中从 main 返回字符串,因为 main 函数的返回值是进程返回码(如果成功则为 0,如果进程失败则不是 0)。所以操作系统正在等待您的应用程序结束的正确信号。

于 2013-10-07T07:44:14.733 回答