C++将函数声明放在头文件中的示例

C++将函数声明放在头文件中的示例

本文可以看作是“C++多文件编程介绍” https://blog.csdn.net/cnds123/article/details/125905593 一文的补充说明。

C++函数原型声明(函数声明)的位置可以有以下几种选择:

1.函数声明放在同一源文件中:这种情况通常适用较小的项目中,通常可以将函数的声明和定义放在同一个源文件中。先声明函数原型,然后定义函数的实现。

2.函数声明放在头文件中,函数定义放在实现文件中。在大型项目中,常常将函数的声明放在一个或多个头文件中,然后将函数的定义放在对应的源文件中。头文件包含函数的原型,以及可能需要的其他声明(例如结构体、宏等),实现源文件则包含函数的具体实现。在另外的源文件(应用自定义头文件的源文件)中使用之。

下面给出示例。

★函数声明放在源文件中,这个常见,例如:

#include <iostream>
using namespace std;

// 函数声明
int add(int a, int b); 

int main() {
    int x = 5;
    int y = 10;
    int sum = add(x, y); //函数调用 ,x 和 y 是实参,它们的值被传递给 add 函数的形参 a 和 b
    cout << "和: " << sum << endl;
    
    return 0;
}

// 函数定义
int add(int a, int b) {
    return a + b;
}

运行效果:

★函数声明放在自定义头文件中,函数定义放在实现源文件中,在另外的源文件(应用自定义头文件的源文件)中使用之。例如:

MathUtils.h文件(头文件)内容如下:

#ifndef MATHUTILS_H
#define MATHUTILS_H

// 函数声明
int add(int a, int b);
int subtract(int a, int b);
double multiply(double a, double b);
double divide(double a, double b);

#endif

 说明,其中

#ifndef MATHUTILS_H

#define MATHUTILS_H

#endif

这是头文件保护宏(header guard)的常见用法。它们的作用是防止头文件的重复包含。

#ifndef MATHUTILS_H这个预处理指令检查是否已定义了名为 MATHUTILS_H 的宏。如果没有定义,表示这是第一次包含该头文件,那么就会执行 #define MATHUTILS_H。

#define MATHUTILS_H:这个预处理指令定义了名为 MATHUTILS_H 的宏。定义这个宏是为了防止多次包含同一个头文件时出现重定义的错误。

#endif:这个预处理指令结束条件编译块。它与 #ifndef 配套使用,将 #ifndef 和 #define 之间的代码包裹起来,确保只有当宏未定义时才会包含这些代码。

头文件保护机制是一个非常常见的做法,它能够确保头文件只被包含一次,避免了由于重复定义而引起的错误。

#ifndef和#define的标识符设置为对应头文件的名称。这样做的好处是可以确保每个头文件都有一个唯一的标识符,避免头文件重复包含的问题。标识符的命名通常会在头文件名称上加上一个下划线,以避免与其他标识符冲突。

例如,对于名为mathutils.h的头文件,我们可以这样设置#ifndef和#define的标识符:

#ifndef MATHUTILS_H

#define MATHUTILS_H

MathUtilsFunctions.cpp文件(头文件的实现源文件)内容如下:

#include "MathUtils.h"

// 函数实现
int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

double multiply(double a, double b) {
    return a * b;
}

double divide(double a, double b) {
    return a / b;
}

mainAPP.cpp文件(应用头文件的源码文件)内容如下:

#include "MathUtils.h" // 自定义头文件
//#include "MathUtilsFunctions.cpp" // 不用包含自定义头文件中函数实现的源文件
#include <iostream>
using namespace std; 

int main() {
    int num1 = 10;
    int num2 = 5;

    int sum = add(num1, num2);
    int difference = subtract(num1, num2);
    double product = multiply(num1, num2);
    double quotient = divide(num1, num2);
   
    cout << "Sum: " << sum << endl;
    cout << "Difference: " << difference << endl;
    cout << "Product: " << product << endl;
    cout << "Quotient: " << quotient << endl;

    return 0;
}

这种方式可以有效地组织代码,提高代码的可维护性和可读性。同时,如果将来需要在其他源文件中使用这些函数,只需包含MathUtils.h头文件即可。

上面例子在mainAPP.cpp文件中只需包含自定义头文件即可。

使用Dev-C++编译和运行带有自定义头文件的C++源代码的步骤如下:

打开Dev-C++,创建一个新项目。

项目类型选Basic页中的Console Application,并为项目起一个名称

在项目中,选择“文件”->“新建”->“源文件”,

添加MathUtils.h、MathUtilsFunctions.cpp、mainAPP.cpp文件

编译运行效果如下:

、在window系统中使用g++编译器编译

如果你在Windows系统上使用g++编译器来编译前面给出的例子,可以按照以下步骤进行:

确保你已经安装了g++编译器。你可以在命令行中输入g++ --version来检查是否已经安装。

1、打开命令提示符cmd或PowerShell,并导航到存储了源代码文件(mainAPP.cpp和functions.cpp)的目录。

2、使用以下命令将两个源代码文件编译为可执行文件(假设头文件header.h位于与main.cpp和MathUtilsFunctions.cpp相同的目录中,你想将可执行文件命名为"program.exe"):

g++ mainAPP.cpp MathUtilsFunctions.cpp -o program.exe

如果代码中没有错误,编译过程将会成功,并且会生成一个名为"program.exe"的可执行文件。

3、双击该可执行文件或者在命令行中输入.\program.exe来运行程序。程序将会在命令行窗口中显示输出结果。

猜你喜欢

转载自blog.csdn.net/cnds123/article/details/132214317