2010-10-26 61 views
0

刚刚在uni举办了一个'编程基础知识'讲座,并被告知使用/声明函数的约定是使程序的顶部有main()函数,函数/程序在其下面,并使用前向声明来防止编译器错误。C++函数约定?

但是,我一直以其他方式完成它 - 顶部main()的功能在底部,不使用前向声明,并且不认为我曾经见过它。

这是对的吗?或者更多的是个人喜好的情况?一些澄清将非常感激。

+2

永远记住,大多数大学教授与编写实际代码几乎没有真正的世界的经验,所以不要把编码约定他们的建议过于认真。 – 2010-10-26 18:50:36

+0

@Kristopher,这有点苛刻! ;)虽然我也是肖的着名评论的狂热粉丝...... – Nim 2010-10-26 18:56:07

回答

5

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

当转发声明函数时,您将不会遇到此问题。

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

+0

我同意把'main'放在首位会让事情更具可读性,但我确实看到了反例。理想情况下,阅读代码的人可以从顶部到底部完成这些工作,并且应该了解顶部正在发生的事情,然后深入研究细节,所以顶部的“main”是实现这一目标的一种自然方式。 – 2010-10-26 18:49:02

10

这取决于你。就我个人而言,我将main放在底部,因为当我有其他功能的时候,它只是一两个其他的小函数或代码片段。

在真实的代码中,你会希望将项目分割(在一个文件中有多个“不相关的”函数是不好的),所以main可能几乎是独立的文件。你只需要#includemain需要的东西去使用它们。

+2

我也会这样做。我从来没有看到一个主要的顶部文件。它只是增加了工作,如果你转发声明,然后实施一旦你改变了一些东西。也像分裂你的代码的一部分! – 2010-10-26 17:50:35

+1

对于建议在其文件中只有'main'的建议+1。 – 2010-10-26 18:46:39

0

有声明(函数原型)的建议与C更接近于C++,因为在C++中没有隐式函数声明,所以您必须始终在使用之前声明。因此,如果您的递归涉及多于一个函数,那么至少有一个函数声明不是定义的。

对于一个小项目,可以使用任何你想要的风格,但要保持一致。 对于大型项目,您可能需要几个.cpp文件,并在头文件中定义接口(即它们的类或函数)。至少在一个文件中也是一致的。

而最后一件事,我说是一致的吗?

+0

不是真的。顺序很重要,因为在C++中,你必须在使用它之前声明一个函数。 – 2010-10-26 17:52:41

+0

我的意思是没有硬性的规则可以遵循。将重述。 – vitaut 2010-10-26 17:55:10

3

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

2

这种方法很可能受到你的教授的青睐,而且很可能是她将它教授为约定的原因。在这里有两种选择,顺其自然(即不要试图破坏并且可能因为教授认为你没有遵循“约定”而对事物进行标记)或向她解释 - 没有要求做这种方式(或任何其他方式),只要代码的意图是明确的!

0

我通常使用第二种方式,因为你必须保持函数声明 - 它们必须有正确的签名和名称,海事组织,他们只是过度打字时,你可能只是先定义功能。没有维护,没有浪费时间。

3

最专业的C++开发人员使用的标准是这样的。每类

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

当您在小型家庭或学校项目上工作时,可以将多个班级甚至整个程序放入一个文件中。由于规模较小,因此如何订购课程或功能并不重要。你可以做更方便的事情。但是,如果你的教授要求学生遵守某些家庭作业的代码标准(例如首先放置main()),那么你必须遵循这些标准。

+0

我就是azheglov同样的想法的,应该有两种文件,声明(xx.h)和执行(xx.cpp),也在逻辑代码应该通过命名空间的方式,每一个包含相关类组织。对于新编译器来说,函数的顺序并不是必需的,旧编译器在使用之前需要声明函数。我更喜欢更公开和最简单的,然后更私人和最复杂的。 – ArBR 2010-10-27 00:09:36

+1

尽管您想遵循自己的编码风格,但您也可以开始习惯遵循由其他人制定的编码风格。一旦你在外面工作,你会发现你的公司将会设置一个编码标准,当你为他们编写代码时,你将会遵守这个标准。通常情况下,公司编码风格已经到位,至少从一个程序员到下一个程序员,代码的格式尽可能一致,因为人们经常因为某种原因而不得不进入彼此的代码。 – RobH 2010-10-28 01:34:35

0

我认为此处适用的原则是“不重复自己”。如果你使用前向声明,你会不必要地重复自己。

+0

FWIW,我不认为DRY适用于这样的问题。 C++自然需要大量冗余,并且以不自然的方式构建代码以尝试减少代码并不是一个好主意。 – 2010-10-26 19:44:43

+0

我不同意这是一种不自然的方式。对我来说这很自然。我已经这么做了多年,我在编程的每种语言都这样做。我发现在原始问题中给出的具体情况导致无用的簿记。我不明白为什么你认为C++需要大量的冗余。我发现C++允许我像任何语言一样消除冗余。 – 2010-10-27 14:58:57