0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言中的头文件能不能重复包含

学益得智能硬件 来源:学益得智能硬件 2024-11-26 17:19 次阅读

C语言中的头文件能不能重复包含?

比如代码写成这样,stdio.h 连续包含了两次。

#include 
#include 

int main()
{
    printf("helloworld
");
    return 0;
}

我们先来编译看下,好像没有任何问题。

root@Turbo:~# gcc test.c -o test 
root@Turbo:~#

同一个头文件,随便包含多少次,都不会有问题,主要是这两行代码起了作用。

#ifndef _STDIO_H
#define _STDIO_H    1

写头文件的时候,习惯上都会加上两个预处理指令,ifndef 和 define。

就以这个 test.h 为例:

#ifndefTEST_H
#define TEST_H

struct Test
{
    int a;
};

#endif

在 test.h 里面声明了一个结构体,然后在源文件中包含了两次。

头文件往往在编译的第一步,预处理的时候展开。

第一次展开 test.h 的时候,会遇到预处理指令 ifndef:

#ifndef TEST_H

翻译过来就是如果没有定义这个宏。

很显然,这个宏确实没有定义过,于是判断成立。

继续往下走,遇到 define:

#define TEST_H

意思就是把这个宏定义一下。

然后就是把 test.h 里面的内容搬到源文件中,这就是所谓的展开。

第二次包含 test.h 的时候,重复上面的操作。

先是遇到 ifndef,很显然,这个宏刚才定义过,于是这条预处理指令不成立,下面的所有代码都会跳过。

这样就清楚了,虽然我们在源码里面包含了 test.h,但是因为判断不成立,并没有真正的包含进去。

相同的头文件在一个源码文件中可以重复包含,因为预处理指令的存在,所以并不会出问题。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7601

    浏览量

    136269
  • 代码
    +关注

    关注

    30

    文章

    4758

    浏览量

    68374

原文标题:重复包含头文件有什么影响

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言中申请的堆内存能不能自动释放

    C语言中申请的堆内存能不能自动释放?每次都要手动 free 太麻烦,也容易忘记。 学过 C++ 的同学,应该首先能想到智能指针。 但是这是C
    的头像 发表于 11-27 09:33 38次阅读

    使用C语言实现函数模板

      用C语言能不能实现一个通用的函数,既能完成整数的相加,又能完成浮点数的相加?
    的头像 发表于 11-09 11:38 302次阅读

    C语言中的socket编程基础

    Socket编程简介 Socket是一种通信机制,允许程序之间进行通信。在C语言中,socket编程是网络编程的基础。通过使用socket,程序可以发送和接收数据,实现不同计算机之间的通信
    的头像 发表于 11-01 16:51 253次阅读

    一体成型电感外壳破损还能不能

    电子发烧友网站提供《一体成型电感外壳破损还能不能用.docx》资料免费下载
    发表于 10-31 10:57 0次下载

    UTB定位技术能不能精准定位

    在当今科技日新月异的时代,定位技术以其广泛的应用场景和不断提升的精度,成为了多个领域的核心支撑。其中,UTB定位技术以其高精度、低延迟和高抗干扰性等特点,在众多定位技术中脱颖而出,成为精准定位领域的佼佼者。那么,UTB定位技术到底能不能精准定位呢?下面就给大家具体介绍一下关于UTB定位技术。
    的头像 发表于 09-03 10:07 287次阅读

    重复头文件的固定结构

    年轻人,你可曾记得,在修习C语言的时候,见过这样的字句:在创建头文件的时候,一定要加入保护宏。
    的头像 发表于 08-29 10:23 318次阅读
    可<b class='flag-5'>重复</b><b class='flag-5'>头文件</b>的固定结构

    C语言中,同一个函数能不能被定义两次?

    稍微有点C语言基础的同学,一定知道不能这样做。
    的头像 发表于 05-11 18:27 1606次阅读

    请问头文件能不能定义变量呢?

    最近在编译一个工程的时候,突然遇到了变量重复定义的问题,根据提示打开这几个 C 文件,并没有发现定义变量的地方。后来再找一找,原来变量定义在了头文件里面。
    的头像 发表于 04-28 09:33 1083次阅读

    C语言中头文件

    #include 指令会指示 C 预处理器浏览指定的文件作为输入。预处理器的输出包含了已经生成的输出,被引用文件生成的输出以及 #include 指令之后的文本输出。
    发表于 02-23 14:06 416次阅读

    C语言中的动态内存管理讲解

    本章将讲解 C 中的动态内存管理。C 语言为内存的分配和管理提供了几个函数。这些函数可以在 头文件中找到。
    的头像 发表于 02-23 14:03 375次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言中</b>的动态内存管理讲解

    同VLAN不同的网段能不能互通?

    同VLAN不同的网段能不能互通? 同一个VLAN中的设备拥有相同的网络地址范围,因此它们可以通过该VLAN进行通信。而不同VLAN中的设备拥有不同的网络地址范围,它们通常不能直接互通。然而,在某些
    的头像 发表于 02-04 11:21 2970次阅读

    pcb压合缓冲垫,究竟能不能让你的电路板更安全?

    pcb压合缓冲垫,究竟能不能让你的电路板更安全?
    的头像 发表于 12-27 10:13 850次阅读

    C语言中结构体能不能相加

    C语言中,结构体能不能相加?
    的头像 发表于 12-19 17:04 1222次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言中</b>结构体<b class='flag-5'>能不能</b>相加

    C语言有哪些预处理操作?

    头文件包含#include作用:将其他文件的内容包含到当前文件中。示例:#include指令用于包含
    的头像 发表于 12-08 15:40 587次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>有哪些预处理操作?

    C语言必备知识头文件包含

    头文件C语言中是非常重要的组成部分。
    的头像 发表于 12-01 18:20 1882次阅读