c++ - 在头文件中定义 C++ 函数是一种好习惯吗?

标签 c++ function header-files

<分区>

我想知道在头文件中存储 C++ 常规函数而不是方法(类中的方法)是否是一个好习惯。

例子:

#ifndef FUNCTIONS_H_INCLUDED
#define FUNCTIONS_H_INCLUDED

int add(int a, int b)
{
   return a + b;
}

#endif

然后像这样使用它:

#include <iostream>
#include "Functions.h"

int main(int argc, char* args[])
{
    std::cout << add(5, 8) << std::endl;
    return 1;
}

这是一个很好的做法吗? 提前致谢!

最佳答案

如果你想在多个源文件中使用一个函数(或者更确切地说,translation units),那么你在头文件中放置一个函数声明(即函数原型(prototype)),并且 < em>定义在一个源文件中。

然后在构建时,首先将源文件编译为目标文件,然后将目标文件链接到最终的可执行文件中。


示例代码:

  • 头文件

      #ifndef FUNCTIONS_H_INCLUDED
      #define FUNCTIONS_H_INCLUDED
    
      int add(int a, int b);  // Function prototype, its declaration
    
      #endif
    
  • 第一个源文件

      #include "functions.h"
    
      // Function definition
      int add(int a, int b)
      {
          return a + b;
      }
    
  • 第二个源文件

      #include <iostream>
      #include "functions.h"
    
      int main()
      {
          std::cout << "add(1, 2) = " << add(1, 2) << '\n';
      }
    

如何构建它在很大程度上取决于您的环境。如果您使用的是 IDE(如 Visual Studio、Eclipse、Xcode 等),那么您可以将所有文件放入项目的正确位置。

如果您在 Linux 或 OSX 中从命令行构建,那么您可以:

$ g++ -c file1.cpp
$ g++ -c file2.cpp
$ g++ file1.o file2.o -o my_program

标志-c 告诉编译器生成一个目标文件,并将其命名为与源文件相同的名称,但带有.o 后缀。最后一个命令将两个目标文件链接在一起形成最终的可执行文件,并将其命名为my_program(这就是-o选项所做的,告诉输出文件的名称) .

关于c++ - 在头文件中定义 C++ 函数是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55944855/

相关文章:

c++ -/Mingw32/bin/ld.exe : cannot find -llibcurl?

带参数的 JavaScript 和 C++ 回调函数

c - 预期标识符或 '('

c++ - 我怎样才能告诉 clang-tidy 检查 pragma 一次而不是 llvm 风格的标题守卫?

c++ - 我如何摆脱此错误main.cpp :43:19: error: no viable overloaded '=' novowels[100] = remove(name[100]);

c++ - 使用 for 、if 和 else 的正确 openmp 实现

C新手malloc问题

python - 将奇数放在列表的连续元素中 : Python 3. 2

c++ - 如何在c++中包含头文件?

c++ - 使用 OpenGL 在拖动鼠标上绘制不连续的线