1.头文件(.h文件)存在的意义

一、关于为什么visual stdio 2022中当多个.c文件中定义的多个函数需要共同作用在一个.c文件的函数中时,通过

步骤实现可以实现的原因:在 Visual Studio 2022 中,即使你没有为 functions1.c 和 functions2.c 创建单独的头文件,并且直接在 main.c 中声明了这些函数,你可能仍然不会遇到编译错误。这是因为Visual Studio 2022 和许多其他现代 C/C++ 开发环境中,确实存在一种“隐式包含”或“隐式链接”的机制,它允许你在没有显式包含头文件的情况下,仍然能够链接到同一个项目中其他源文件定义的函数。

然而,这种做法并不是标准的 C 或 C++ 编程实践。通常,你应该为每个源文件创建一个头文件,并在头文件中声明该源文件中的函数。然后,在其他源文件中包含这些头文件,以便可以调用这些函数。这样做有几个好处:

  1. 模块化:它有助于将代码分解为可管理的模块,每个模块都有清晰的接口。
  2. 可读性:其他开发人员可以更容易地理解你的代码,因为函数声明和定义是分开的。
  3. 避免重复定义:如果你尝试在没有头文件的情况下直接在多个源文件中声明相同的函数,你可能会遇到重复定义的错误。

尽管 Visual Studio 可能允许你在没有头文件的情况下链接函数,但这并不意味着这是一个好的编程实践。为了编写可维护、可扩展和易于理解的代码,建议始终遵循标准的 C 和 C++ 编程惯例,包括使用头文件来声明函数。

好奇的问题解决了,那么来谈正确的,合理的做法:

二、 .h文件的功能:保存函数声明、宏定义、类型定义等(可以一个.h保存着多个.c文件的声明)

        .h文件被设计的意义:通过做出#ifndef的操作,避免了重复声明的问题→这是上面的直接到处声明导致错误的解决办法)

→ #ifndef、#define 和 #endif 是C和C++预处理器(preprocessor)中的指令,主要用于防止头文件的内容在同一编译单元中被多次包含(也称为头文件保护或包含保护)。

  1. #ifndef(if not defined): 这个预处理器指令用于检查某个宏(macro)是否已经被定义。如果该宏没有被定义,那么#ifndef后面的代码块(直到#endif)会被包含进来。这通常用于检查某个头文件是否已经被包含过。
  2. #define: 这个预处理器指令用于定义一个宏。在头文件保护中,它通常用于定义一个标识符,表示该头文件已经被包含。这样,如果同一个头文件再次被尝试包含,由于该宏已经被定义,#ifndef的条件将不再满足,从而防止了头文件的重复包含。
  3. #endif: 这个预处理器指令表示#ifndef或#ifdef条件块的结束。

以下是一个常见的头文件保护的例子:

在这个例子中,如果MY_HEADER_H没有被定义,那么#ifndef和#endif之间的代码会被包含进来,并且MY_HEADER_H会被定义。如果MY_HEADER_H已经被定义(即这个头文件之前已经被包含过),那么#ifndef和#endif之间的代码块将被忽略,从而避免了重复包含。

这种做法确保了即使一个头文件被多次包含在同一个源文件中,它的内容也只会被包含一次,避免了因重复定义导致的编译错误。

说回.h文件的功能:在其他的xx.c文件中想进行int add(int a, int b); int subtract(int a, int b);

此类声明函数的操作。

        仅仅只需要#include "xxx.h" 的操作 == 将xxx.h内所有的代码复制 == 声明被复制了 == 我在xx.c文件里声明了。

补充:由上面的这个说法→在不同的小.c文件中并不需要去include那些.h文件,除非你设计的子函数真的同时用上了其他文件的函数,变量等。

functions.h:

main.c:

通过在main.c中包含functions.h头文件,即无需重复进行函数的声明。

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AX—01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值