关于C ++简单工作的问题?

时间:2011-11-02 23:07:53

标签: c++ coding-style

我只是有一些关于保持代码清洁和可读性的一般性问题。

1)函数是否应该与main(原型和初始化)具有单独的文件? (功能很长)

2)如果函数确实有单独的文件,在Main中我是否包含函数原型或函数初始化?

3)主要的全局变量是否在项目的所有文件中共享?如果没有,我将如何使变量可以被所有文件访问?

4)如果我包含函数,当我使用#include时,我是否将函数文件名保存在<>""中?我什么时候才能使用每一个?

5)包含功能时,我是否只包括其名称或完整地址? (我正在使用代码块)。例如,如果我包含一个名为calculate.hpp的函数文件,我会#include "calculate.hpp"还是#include "Users\Me\My Documents\calculate.hpp"

3 个答案:

答案 0 :(得分:1)

很多问题!

  

1)函数是否应该与main(原型和初始化)具有单独的文件? (功能很长)

简单地说:

  • 声明进入头文件(.h)
  • 定义进入源文件(.cpp)

如果“功能很长”,请考虑如何缩短它们。由于您要求保持代码清洁,我建议Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin,详细讨论这个问题。

  

2)如果函数确实有单独的文件,在Main中我是否包含函数原型或函数初始化?

您应该只#include个头文件。

  

3)主要的全局变量是否在项目的所有文件中共享?如果没有,我将如何使变量可以被所有文件访问?

全局变量应该是例外而不是规则。但是,请参阅我之前关于声明和定义的观点。

  

4)如果我包含函数,当我使用#include时,我将函数文件名保存在&lt;&gt;中要么 ””?我什么时候才能使用每一个?

你是#include - 整个文件,而不仅仅是一个函数。

  • <>用于系统范围的标头,例如标准库中的标头
  • ""表示本地标题,例如您自己的calculate.hpp
  

5)包含功能时,我是否只包括其名称或完整地址? (我正在使用代码块)。例如,如果我包含一个名为calculate.hpp的函数文件,我会#include“calculate.hpp”或#include“Users \ Me \ My Documents \ calculate.hpp”吗?

使用相对路径(必要时使用正斜杠),绝不使用绝对路径。考虑当其他人试图构建您的代码时会发生什么。

我建议在SourceForgeGitHub上查看一些开源C ++项目,看看它们是如何布局的。

答案 1 :(得分:1)

编译器应该看到当前翻译单元中标识符的声明。话虽如此,因为它是C ++,让我们考虑一下成员函数。

  1. 是的,从声明中分离实现(模板是一个例外情况,你也可以绕过它)。
  2. 编译器应该看到您尝试调用的特定成员函数的原型(声明)。所以,是的,它需要查看原型,如果它没有定义在链接器炸弹的任何地方。
  3. 可以跨任何源文件访问全局变量,前提是文件使用关键字extern指定变量的外部链接。
  4. 通常标准标题包含在<>中。如果您有一个用户定义的标题,那么它将包含在""中。
  5. 这取决于。如果您的标题位于当前项目目录中,则仅指定标题文件就足够了。或者,如果它位于任何其他地方,则需要提供其位置的完整路径。

答案 2 :(得分:0)

  1. 取决于具体细节。

  2. 为每组功能创建一个头文件。所有依赖模块中的#include加上实现模块。

  3. 全局变量可供任何了解它们的模块使用。通常,它们将在与extern相同的模块头文件中声明。

  4. #include <file.h>用于标准库文件。对所有其他人使用#include "file.h"。在大多数情况下,建议不要提供路径:使用-I编译器命令行选项列出包含目录。这有助于构建控制和管理不同的编译环境。

  5. 首先,永远不要在路径中使用反斜杠。始终使用正斜杠。甚至在Windows上。其余的请参见#4。