【问题标题】:C++ Function Conventions?C++ 函数约定?
【发布时间】:2010-10-26 17:37:34
【问题描述】:

刚刚在 uni 上过一个“编程基础”讲座,并被告知使用/声明函数的约定是在程序顶部有 main() 函数,在它下面有函数/过程并使用 forward声明以防止编译器错误。

但是,我总是以另一种方式做到这一点 - 函数在顶部 main() 在底部并且不使用前向声明,并且我认为我从未见过它。

哪个是对的?还是更多的是个人喜好?一些澄清将不胜感激。

【问题讨论】:

  • 请记住,大多数大学教授在编写实际代码方面几乎没有实际经验,因此不要太认真地对待他们对编码约定的建议。
  • @Kristopher,这有点苛刻! ;) 虽然我也是 Shaw 著名评论的狂热粉丝……

标签: c++ function conventions procedures


【解决方案1】:

这取决于你。就个人而言,我将main 保留在底部,因为当我在其中有其他功能时,它要么只是一两个其他小功能,要么是一个代码 sn-p。

在实际代码中,您希望将您的项目拆分(在一个文件中有多个“不相关”的函数是不好的),因此 main 可能几乎是文件中的一个人。您只需 #include main 需要的东西来让事情顺利进行并使用它们。

【讨论】:

  • 我也会这样做。我从未见过顶部有 main 的文件。如果您转发声明然后在您更改某些内容后实施,它只会增加工作。也喜欢拆分代码的部分!
【解决方案2】:

当您的功能相互关联时,可能会出现这种情况。如果您只是将它们写在main() 之上而没有前向声明,则必须订购它们,以便他们知道它们所依赖的功能。在某些情况下(循环引用),如果没有前向声明,甚至无法编译。

向前声明函数时,您不会遇到此问题。

另外,当将main() 作为第一个函数时,您将生成更具可读性的代码,但这可能只是个人喜好。
它也可能更具可读性,因为另一位编码员对他将在文件中找到的函数进行了概述。

【讨论】:

  • 我同意将main 放在首位会使事情更具可读性,但我确实看到了反例。理想情况下,阅读代码的人可以从上到下这样做,并且应该对顶部发生的事情有一个概览,然后深入研究细节,因此顶部的main 是实现这一目标的自然方式。跨度>
【解决方案3】:

如果有一个标准,那就是在包含的 .h 文件中包含函数声明。这样,文件中函数的顺序无关紧要。我几乎从不编写没有声明的函数,当其他人这样做时,我感到很吃惊。

【讨论】:

    【解决方案4】:

    大多数专业 C++ 开发人员使用的标准是这个。

    • 每个类两个文件:头文件(例如,Class.h),它只声明类的所有数据成员和函数;和实现文件(在同一示例中名为 Class.cpp),仅包含这些函数的实现。
    • 主要功能(如果您的解决方案有)进入一个名为的文件,例如Main.cpp 全部独立。

    当您从事小型家庭或学校项目时,可以将多个课程甚至整个程序放入一个文件中。由于规模小,您如何订购类或函数并不重要。你可以做对你来说更方便的事情。但是,如果您的教授要求学生在作业时遵循某些代码标准(例如,将 main() 放在首位),那么您必须遵循这些标准。

    【讨论】:

    • 我和azheglov的想法一样,应该有两种文件,声明(xx.h)和实现(xx.cpp),逻辑上代码应该通过以下方式组织命名空间,每一个都包含相关的类。新编译器不需要函数顺序,旧编译器需要在使用之前声明函数。我更喜欢首先更公开和最简单,然后更私密和最复杂。
    • 尽管您想遵循自己的编码风格,但您不妨开始习惯遵循别人制定的风格。一旦你离开工作岗位,你会发现你的公司已经建立了一个编码标准,你在为他们编写代码时应该遵守该标准。通常情况下,公司编码风格的设置是为了至少使代码的格式从一个程序员到另一个程序员尽可能统一,因为人们经常出于某种原因不得不进入彼此的代码。
    【解决方案5】:

    这种方法很可能受到您的教授的青睐,并且很可能是她将其作为惯例教授的原因。这里有两个选择,顺其自然(即不要试图破坏并可能因为你的教授觉得你没有遵循“惯例”而被扣分)或向她解释——没有要求做这样(或任何其他方式),只要代码的意图是明确的!

    【讨论】:

      【解决方案6】:

      声明(函数原型)的建议与 C 相关,而不是与 C++ 相关,因为在 C++ 中没有隐式函数声明,因此您必须始终在使用前声明。因此,如果您有一个涉及多个函数的递归,那么您肯定会有至少一个未定义的函数声明。

      对于小型项目,请使用您想要的任何样式,但要保持一致。 对于一个大型项目,您可能需要几个 .cpp 文件并在头文件中定义接口(无论是类还是函数)。至少在单个文件中也要保持一致。

      最后一件事,我说过要保持一致吗?

      【讨论】:

      • 不是真的。顺序很重要,因为在 C++ 中,您必须在使用函数之前声明它。
      • 我的意思是没有硬性规则可以遵循。会改写。
      【解决方案7】:

      我通常使用第二种形式,因为您必须维护函数声明 - 它们必须具有正确的签名和名称,而且 imo,当您可以先定义函数时,它们只是过度输入。无需维护,无需浪费时间。

      【讨论】:

        【解决方案8】:

        我认为这里适用的原则是“不要重复自己”。如果您使用前向声明,那么您就是在不必要地重复自己。

        【讨论】:

        • FWIW,我认为 DRY 不适用于此类问题。 C++ 自然需要大量冗余,以不自然的方式构建代码以尝试减少冗余并不是一个好主意。
        • 我不同意这是一种不自然的方式。这对我来说很自然。多年来我一直这样做,并且在我编程的每种语言中都是这样做的。我发现原始问题中给出的具体案例导致无用的簿记。而且我不明白为什么您认为 C++ 需要大量冗余。我发现 C++ 可以像任何语言一样消除冗余。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-24
        • 1970-01-01
        • 2011-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-05
        相关资源
        最近更新 更多