如何在 C 语言中创建自己的头文件

2024 年 8 月 28 日 | 阅读 6 分钟

在本文中,您将学习如何在 C 语言中使用提供的步骤和示例创建自己的头文件

在 C 语言中,为了声明可以跨多个 C 源文件(.c 文件)共享的函数、数据结构、常量和其他声明,创建头文件标准做法。这样您的代码会更精简、更有条理,便于维护促进重用。下面将介绍如何在 C 语言中创建自己的头文件。

步骤 1:创建一个带有“.h”扩展名的新文件。

首先,通过将新文本文件命名为带有“.h”扩展名来开始。例如,您可以将其命名为“my header.h”

步骤 2:添加头文件保护符

头文件保护符可防止头文件在单个编译单元中被包含多次。它们确保头文件内容仅包含一次。请在头文件的开头和结尾添加以下行:

步骤 3:添加您的声明

您可以在头文件中放置任何您想在源文件中一致使用的声明。头文件通常包含函数原型、结构定义、常量值外部变量等声明。

让我们用以下示例来说明如何使用函数来计算平方数和光速。

步骤 4:在源文件中包含头文件

要在 C 源代码中使用头文件中的声明,请在每个源文件的开头包含头文件

例如,您可以按照以下方式在“main.c”源文件中包含“myheader.h”源文件:

步骤 5:编译代码

编译 C 代码时,请确保包含头文件以及所有其他必需的源文件。例如,您可以同时编译“main.c”“myheader.h”,如下所示:

步骤 6:运行代码

步骤 7:输出

说明

  • calculateSquare函数原型和常量变量SPEED_OF_LIGHT的外部定义包含在“header.h”头文件中。
  • “my functions.c”包含calculateSquare函数的实现,该函数计算给定数字的平方。
  • 常量变量SPEED_OF_LIGHT“constants.c”中的定义为0,光速的单位是米/秒
  • 主函数在“main.c”中使用了头文件,该文件使用了常量变量SPEED_OF_LIGHT和函数calculateSquare
  • 源文件组合后,将生成可执行文件“my_program”
  • 执行后,程序使用calculateSquare 函数计算整数5的平方,显示结果和常量变量SPEED_OF_LIGHT的值。
  • 您的代码已成功实现,为函数和常量变量使用了单独的源文件。

复杂度分析

时间复杂度

  • 此函数的时间复杂度O(1)。该函数通过单个操作(乘法)计算给定数字num的平方。操作次数与num 的大小无关,是恒定的,因此时间复杂度为O(1)

空间复杂度

  • 此函数的空间复杂度O(1)。该函数没有动态内存分配或递归函数调用,而是使用固定量的内存来存储局部变量 num。因此,空间复杂度是常数。
  • 常量变量SPEED_OF_LIGHT是一个双精度类型,具有O(1) 的空间复杂度。常量变量具有固定的内存占用,独立于任何输入或问题大小。
  • “main.c”中的主函数也具有O(1) 的空间复杂度。主函数中没有递归调用动态内存分配,它将局部变量(如numsquare)存储在固定量的内存中。
  • 由于整个程序仅使用固定的内存量,并且不随输入大小而改变,因此其整体空间复杂度也为O(1)

程序

让我们通过一个程序来理解如何创建自己的头文件

输出

The value of PI: 3.14159
The value of (10 + 7): 17
The value of (20 - 9): 11
The value of (8 * 6): 48
The value of (12 / 3): 4.00

说明

  • 该程序包含标准输入输出库h,以使用printf等函数。
  • 该程序使用预处理器指令#ifndef、#define#endif定义了一个头文件“operations.h”。它可防止在同一编译单元中多次包含头文件
  • 在头文件内部,我们执行以下操作:
  • 常量声明#定义PI 3.14159和一个值为14159宏 PI
  • 它包含加法、减法、乘法除法四种运算的函数原型。
  • 之后,我们在头文件下方实现了加法、减法、乘法和除法这四个函数。每个函数执行相应的算术运算并返回输出。
  • 主函数执行以下操作:
  • 使用带有格式说明符%fprintf() 函数打印PI的值,以显示小数点后五位的常量值。
  • 使用printf() 函数调用add、subtract、multiplydivide函数,并打印它们的结果。
  • 最后,程序返回 0表示成功执行。

复杂度分析

时间复杂度:O(1)

时间复杂度是常数,因为所有函数执行的都是常数时间操作,与输入大小无关。

空间复杂度:O(1)

该程序使用的内存量是固定的,与输入大小无关。因此,空间复杂度是固定的。

特性

头文件有几个特点。一些主要特点如下:

简单的用户交互:该程序通过使用printf() 函数显示数学运算的结果来说明简单的用户交互。此功能允许用户与程序交互并查看计算结果。许多程序依赖简单的用户交互来为消费者提供反馈和有用信息。

可重用性:通过使用带有函数原型的唯一头文件可以实现这一点。函数可以在头文件中声明,以便其他源文件可以使用而无需重新定义。此功能鼓励“不要重复自己”(DRY)原则,防止代码重复培育更清晰、更易于维护的代码库。可重用性可减少代码重复,并在不同程序区域需要相同功能时简化将来的代码修改。

灵活性:该程序中的模块化设计和函数使用增强了其灵活性。由于关注点的分离,添加修改功能相对简单。通过将新算术运算或常量添加到头文件并在相应的源文件中实现它们,可以轻松引入它们。这种灵活性使程序能够演变并适应不断变化的需求,而无需进行大量代码修改。

简单的执行:程序的执行很简单,适用于输入量小且大小固定的情况。对于开发人员来说,代码更易于理解和维护,因为它消除了不必要的复杂性,并专注于基本的算术运算。简单的执行也有助于调试和查找程序中的任何问题。

模块化: C 程序使用名为“operations.h”的唯一头文件简化了模块化,用于定义常量函数原型。头文件通过将声明与实现分离充当接口。借助这种模块化方法,开发人员可以单独处理代码库的各个部分,从而提高代码的组织性和可维护性。模块化还有助于在程序扩展时隔离更改,从而降低在代码的其他区域引入错误的风险。