将主函数拆分为多个文件C ++

时间:2016-05-15 18:52:19

标签: c++ include game-engine

我正在学习C ++,我正在尝试制作2D游戏,我想知道是否有任何方法可以将主要功能分成多个文件,这些文件代表游戏的不同状态(主菜单,游戏)。 。)以保持文件清晰可读。 我不认为我想使用其他函数,因为我想继续访问main函数中的所有变量。 另外,我认为#include不应该以这种方式使用,这就是我要问的原因。

有可能还是我做错了?拆分主要功能是一个坏主意吗?我是否应该使用带指针或引用的函数,即使我想使用许多变量?我真的不知道如何继续。

3 个答案:

答案 0 :(得分:4)

我想说的是,你想要在如此大的代码片段中共享许多变量,你觉得代码应该被拆分成单独的源文件。这与在整个应用程序中通过各种函数访问许多全局变量没什么不同 - 这通常也不是一个好主意。

您应该考虑如何将数据组织到对象中,以逻辑方式将相关项组合在一起。

答案 1 :(得分:3)

当然,您可以将程序拆分为多个源文件。 这样做的方法通常是将它分成多个函数/类,然后将它们放在多个文件中。

您明确询问是否可以将main()拆分为多个文件,问题也是"是"。您有多种选择:

  • 滥用预处理器并将main块放在不同的文件中,然后#include main()内的块(虽然这是一个非常糟糕的主意)。

  • main()所做的工作拆分为类和函数,并将它们需要处理的数据传递给它们。如果共享状态的数量很大,您可以将其放入您传递的struct - 或 - 更好,重新设计您的设计以减少对共享状态的依赖。 (您也可以使用全局变量,但这将是非常糟糕的解决方案)。

只需使用课程/功能并编写您的课程,这样您就不需要大量的共享变量..

答案 2 :(得分:1)

我知道您希望将所有内容保存在一个函数中,因为它可能看起来更简单,更容易理解。但是,当您添加更多代码时,您的功能将变得难以管理。而且你会意识到从头开始重写所有内容比修改现有代码更容易。我们都去过那儿。 作为建议,您应该了解函数和类的工作原理。事实上,他们在这里使程序更容易编写和理解。

说到main()。保持此功能尽可能短是一种很好的做法。它应该是您的程序的高级概述。您调用的其他功能的所有详细信息。类似的东西:

int main(int argc, char* argv[])
{
    parse_arguments (argc, argv);
    initialize_display (...);
    initialize_user_input (...);
    initialize_game_engine (...);

    run_game_engine (...); // <-- here is your eternal loop with a timer

    cleanup_game_engine ();
    release_user_input ();
    release_display ();
    return 0;
}

这只是一个例子。每个游戏的结构都不同。此外,最好用课程来完成。

底线 - 不要将所有代码保存在一个函数中。将大型函数分解为较小的函数,然后尽可能隔离。使用尽可能少的全局变量。 应该通过值传递简单数据类型(int,double ...)。其他所有内容(类,结构,字符串......)应该通过引用传递(最好是const)。 正如Jesper Juhl所提到的,大量变量应该组合成结构或类。 现在你根本不需要原始指针。只有在必要时才使用它们。有很多API仍然需要指针。