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

C++ 关于C+的简单工作的问题+;?,c++,coding-style,C++,Coding Style,我只是有一些关于保持代码干净和可读性的一般性问题 1) 函数是否应该与主函数(原型和初始化)有单独的文件?(功能很长) 2) 如果函数有单独的文件,我主要包括函数原型还是函数初始化 3) 主文件中的全局变量是否在项目中的所有文件中共享?如果没有,我将如何使变量具有所有文件的访问权限 4) 如果我包含函数,当我使用#include时,我是否将函数文件名保存在或“?我什么时候可以使用每一个 5) 当包含函数时,我是否只包含其名称或完整地址?(我正在使用代码块)。例如,如果我包含一个名为calcula

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

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

2) 如果函数有单独的文件,我主要包括函数原型还是函数初始化

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

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

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

有很多问题

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

简单地说:

  • 声明位于头文件(.h)中
  • 定义位于源文件(.cpp)中

如果“函数很长”,考虑如何缩短它们。既然你问的是保持代码干净,我推荐你,它详细地讨论了这一点

2) 如果函数有单独的文件,我主要包括函数原型还是函数初始化

您应该只包含头文件

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

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

4) 如果我包含函数,当我使用#include时,我是否将函数文件名保留在或“”中?我什么时候可以使用每一个

您正在
#包含整个文件,而不仅仅是一个函数

  • 用于系统范围的标题,如标准库中的标题
  • 用于本地标题,例如您自己的
    calculate.hpp
5) 当包含函数时,我是否只包含其名称或完整地址?(我正在使用代码块)。例如,如果我包括一个名为calculate.hpp的函数文件,我会包括“calculate.hpp”还是“Users\Me\My Documents\calculate.hpp”

使用相对路径(必要时使用前斜杠),而不是绝对路径。想想别人试图建立你的代码时会发生什么。

我建议检查一些开源C++项目,或者看看它们是如何布局的。

  • 取决于具体情况

  • 为每组函数创建头文件<代码>#将其包括在所有相关模块和实施模块中

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

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

  • 首先,不要在路径中使用反斜杠。始终使用前斜杠。甚至在窗户上。其余内容见第4页


  • 编译器应该查看当前翻译单元中标识符的声明,以及所使用的内容。这样说,既然是C++,让我们考虑成员函数。< /P>
  • 是的,将实现与声明分开(模板是一个例外,您也可以绕过它)
  • 编译器应该看到您试图调用的特定成员函数的原型(声明)。所以是的,它需要看到原型,如果它没有在任何地方定义,那么链接器就会爆炸
  • 可以通过任何源文件访问全局变量,前提是该文件使用关键字
    extern
    指定变量的外部链接
  • 通常,标准标题包含在
    中。如果您有一个用户定义的标题,那么它将被包含在
  • 视情况而定。如果头文件位于当前项目目录中,只指定头文件就足够了。或者,如果它驻留在任何其他地方,则需要提供指向其位置的完整路径

  • 这更像C++如何工作,而不是哪种编码方式更好!你说得对,我改了谢谢汉克斯。我会在宣言中把执行情况联系起来吗?因为没有其他文件可以访问实现。谢谢。我会在宣言中把执行情况联系起来吗?因为没有其他文件可以访问实现。谢谢。我会在宣言中把执行情况联系起来吗?因为其他no文件将有权访问实现。定义需要链接,是的。链接将使用#include too完成?Thanks@user1017485:否。链接将由