这可能是一个短期和简单的问题,但是我从来没有找到一个满意的答案:

什么代码的主要()功能通常包括在一个大的C++的项目?它会是一个不正确的假设,认为这是通常只是初始化(包装)的类对象和调用一个功能,以便设置的东西关掉?

为什么是主要的()没有一个方法在第一个地方吗?它是保留向后兼容性C?

有帮助吗?

解决方案

在我的代码中,它基本上是构造函数调用,可能是方法调用,以及一些异常处理。这是我自己的项目的主要内容(标题和注释被省略,并且格式化了SO,像往常一样):

int main( int argc, char * argv[] ) {
    int result = 0;
    try {
        CLIHandler ch( argc, argv );
        result = ch.ExecCommand();
    }
    catch( const Exception & ex ) {
        result = ExceptionHandler::HandleMyError( ex );
    }
    catch( const std::exception & ex ) {
        result = ExceptionHandler::HandleOtherError( ex );
    }
    catch( ... ) {
        result = ExceptionHandler::HandleUnknownError();
    }
    return result;
}

其他提示

我通常做的

  • 命令行分析
  • 初始化的顶级别的对象
  • 例外处理
  • 进入主要的'执行'循环

我的理解是, int main(int argc, char *argv[]) 基本上是由于《公约》 C 文化遗产。从来没有让我吃惊奇的,而是作为有用的。C++延伸C毕竟...(并且是有细微的差别,但不是这里的问题).

是的,原因是向后兼容性。主要是唯一的入境点,允许在一C节目产生可执行的,因此在C++的程序。

为什么要做在C++主要的,它依赖。在一般情况下,我用:

  • 执行全球初始化(例如的记录子系统)
  • 分析命令行辩论和定义的一个适当的类含有它们
  • 分配一个应用程序的对象,设置起来,等等。
  • 运行的应用对象(在我的情况下,无限循环的方法。GUI编程)
  • 做最后定稿的对象之后已经完成了它的任务。

哦,我忘了最重要的应用程序的一部分

  • 秀闪屏

简短的回答:这取决于。它可能会在程序持续时间内创建一些本地对象,配置它们,相互告诉它们并在其中一个上调用一个长时间运行的方法。

程序需要一个入口点。如果 main 必须是对象的方法,那么它应该是什么类类型?

使用 main 作为全局入口点,它可以选择要设置的内容。

我的main()函数经常构造各种顶级对象,为它们提供相互引用。这有助于最小化耦合,保持不同顶级对象之间的确切关系局限于主要。

这些顶级对象通常具有不同的生命周期,使用init(),stop()和start()方法。 main()函数管理使对象进入所需的运行状态,等待任何指示是时候关闭,然后以受控方式关闭所有内容。同样,这有助于保持正确的解耦,并将顶级生命周期管理保持在一个易于理解的位置。我在反应系统中看到了很多这种模式,特别是那些有很多线程的模式。

通过在高级链接器选项下选择项目设置中的入口点,可以使用静态类成员函数代替MSVC ++编译器的main。

这真的取决于你的项目你想要放在那里...如果它很小你也可以把消息循环,初始化和关机代码放在那里。在较大的项目中,您必须将它们移动到自己的类/函数中,或者更少具有单一的入口点函数。

并非所有C ++应用程序都是OOP,并且无论哪种方式,所有代码都需要一些入口点才能开始。

当我编写OOP代码时,我的 main()往往包含一个对象实例化,可能由一些用户输入继续。我是这样做的,因为我觉得“工作”意味着在一个对象中完成,否则代码不是用OOP的“精神”写的。

我通常使用main在命令行中读取,初始化全局变量,然后调用相应的函数/方法。

真正大型项目往往不包含单个程序。因此会有几个可执行文件,每个可执行文件都有自己的main。顺便说一句,这些可执行文件通过队列异步通信是很常见的。

是的,每个主要确实非常小,初始化框架或其他任何东西。

你的意思是为什么main()是一个函数而不是一个类的方法?嗯,这是一个什么类的方法?我认为这主要是来自C的C ++遗产,但......一切都要从某个地方开始:-)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top