【问题标题】:Newbie design considerations for a C/C++ applicationC/C++ 应用程序的新手设计注意事项
【发布时间】:2010-07-16 19:07:10
【问题描述】:

我对编写“更大”的应用程序很陌生。我现在已经在 Visual C++ 2010 中编写了一个包含几千行代码的命令行应用程序,它可以编译并且运行良好。大多数代码都是 C 兼容的(我认为),但是,我发现在这里和那里使用一些 C++ 结构很有用。例如,有时我使用 new/delete 而不是 malloc/free 来调用构造函数,或者为了方便使用 std::vector 或 std::set。我将所有代码放在大约 25 个 .h 文件中,但 int main() 除外,它当前位于 .cpp 文件中。

我的具体问题是:

  • 我猜我的所有代码都编译为 C++ 代码。使代码的某些部分真正符合 C 语言是否有意义?那么我可以让 Visual Studio 将它编译为 C 吗?对于程序的大部分,使它们符合 C 标准(例如,用 malloc 和初始化函数替换 new 等)对于某些更难的部分(转换 std::vector)将非常简单。还是只有当一切都是 C 时才有意义?会有什么优势?或者,将所有内容都转换为 C++ 是否有意义?例如,使用 new 代替 malloc 和 std::string 代替 char*。

  • 我猜它并不打算将所有代码都放在 .h 文件中。我应该如何将我的代码放入文件中?除了少数,我没有很大的班级。我的大部分代码都是过程和函数。

我的两个主要关注点是效率和良好的编程标准。便携性现在不是问题。

非常感谢!!

【问题讨论】:

  • 听起来你使用mallocfree除了熟悉之外没有任何理由。我建议你熟悉 C++ 的做事方式。使用newdelete,不要犹豫使用vectors等。
  • 不要将所有代码都放在 H 文件中。这在更大的应用程序中效果不佳。学会将声明与定义分开。
  • 您的指导很有帮助。 @zvonimir:我的大部分代码都是过程和函数......我应该为函数声明创建一个 .h 文件吗?

标签: c++ c visual-c++


【解决方案1】:

IMO,2010 年不需要符合“C”。只需使用 C++ 及其所有优势(STL、boost、所有爵士乐......)

AFAIK,将代码放在头文件中是不正常的做法,通常代码放在实现文件中(.c,.cpp,...)。

将代码放在 C/CPP 文件中(而不是头文件)可以让您优化编译时间依赖性(前向声明、PIMPL、...)并限制您不希望“用户”的非公共数据的可见性一段代码来看看。

从长远来看,使用标准库可以减少在处理复杂结构和算法时可能/将会发生的潜在错误,从而有助于代码的稳定性、可读性和维护(例如,处理 std::vector 更容易)比数组和 std::string 比 char*)

M.

【讨论】:

    【解决方案2】:

    就 .h/.c/.cpp 文件而言,接口放在头文件中,编译后的东西放在 .c/cpp 文件中。

    因此,如果您有一个计算小部件的模块,您可以将 calculate_widget 函数原型放在 .h 文件中,并将实际执行此操作的代码放在 .c 文件中。任何其他想要计算小部件#includes widgetcalc.h 并调用calculate_widgets 的模块。然后可以在静态函数中声明任何未被外部模块调用的代码,这有助于优化并防止命名空间发生冲突。

    作为一般规则,如果一行代码编译成一定数量的处理器指令,则它不属于 .h 文件。

    【讨论】:

      【解决方案3】:

      如果您编译的文件具有“C”扩展名,它将被编译为 C。如果它被称为“CPP”,它将被编译为 C++。

      如果想使用 C++ 的特性,我建议一切都是 C++,它让生活更简单。 C++ 看起来非常像 C,除非您使用 C++ 功能,否则它不会花费任何成本。

      【讨论】:

        猜你喜欢
        • 2011-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-23
        相关资源
        最近更新 更多