【问题标题】:The position of int main() function [closed]int main() 函数的位置
【发布时间】:2015-05-15 05:14:22
【问题描述】:

我知道可以这样写代码:

void foo() {...}
void bar() {...}
string qix(){...}

int main() 
{
//functions calling
}

也可以这样写:

/* function's prototypes here*/

int main()
{
//functions calling
}

void foo() {...}
void bar() {...}
string qix(){...}

那么,如果我想创建一个好看、易于理解的代码,那么放置 main() 函数的最佳方式是什么?我应该把它放在其他功能的描述之前/之后吗?通常使用哪种变体?

【问题讨论】:

  • 谢谢你们,我现在似乎有点清楚了。
  • 虽然我自己认为反对票有点苛刻,而且在没有任何解释的情况下有点烦人,但我很确定您上面评论中的语气在这里不受欢迎。
  • 我喜欢函数名称,这是 foobar 的一个全新变体,源于俄罗斯;)
  • 到处都看到 foobar 真烦人,所以我决定让它有点不同:)

标签: c++ function styles main writing


【解决方案1】:

当程序是C而不是C++时,我总是把我的main函数放在开始,所以如果有人或你自己想看程序逻辑,那么不需要去文件末尾就可以看到,如果任何人对任何功能都有疑问,只需向下滚动即可。 这是我的意见。 在优化方面是一样的。 在 C++ 中,我的 main 方法只有几行,所有函数都在类中。

原来是这样的:

int main()
{
//functions calling
}

void piz() {...}
void detz() {...}
string huinya(){...}

希望对你有所帮助。

【讨论】:

  • 说实话,这种对代码的思考方式让我想起了 Fortran 77 编程……
【解决方案2】:

在任何稍微复杂的程序中,您都会有多个编译单元(阅读:多个 *.cpp 文件)。

包含main 的文件不会包含任何其他函数(或类、结构、typedef 等),尤其是所有 其他函数!当然,它将有许多#include 语句。您只是不要将所有内容都写在一个大的源文件中。

因此,main 的正确位置是:只在它自己的文件中,类似于main.cpp

【讨论】:

    【解决方案3】:

    这真的取决于个人喜好,但我理解的标准是你的第二个例子。当谈到“放置 main() 函数的最佳方式”时,确实没有这样的事情,你会适应手头的情况。

    /* function's prototypes here*/
    
    int main()
    {
    //functions calling
    }
    
    void piz() {...}
    void detz() {...}
    string huinya(){...} 
    

    【讨论】:

      【解决方案4】:

      这是个人喜好问题,但我喜欢对我的程序进行结构化,以便 main 函数是单个文件 main.cpp 中的唯一函数。它通常看起来像这样:

      // include statements
      
      int main()
      {
          try{
              // call functions to initialize program
      
              return EXIT_SUCCESS;
          }
          catch(std::exception& e){
              std::cerr << e.what() << std::endl;
          }
          catch(...){
              // additional exception handling for exceptions not derived from std::exception
          }
          return EXIT_FAILURE;
      }
      

      这会从代码中的其他位置捕获所有未处理的异常,并保持 main 函数的简单和干净。对于

      EXIT_SUCCESS
      

      EXIT_FAILURE
      

      cstdlib

      【讨论】:

      • 您可能需要为并非源自 std::exception 的任何内容添加 catch (...),这种情况很少见,但可能会发生。
      • @Christian Hackl 谢谢,这是一个好点。 (进行了编辑)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      相关资源
      最近更新 更多