C++重新认知:头文件的预处理

一、为什么头文件需要预处理

预处理的功能是对一个资源进行替换。

预处理的几种形式

  • 常见的预处理指令
    #define 宏定义
    #undef 取消宏
    #include 文本包含
    #ifdef 如果宏被定义就进行编译
    #ifndef 如果宏未被定义就进行编译
    #endif 结束编译块的控制
    #if 表达式非零就对代码进行编译
    #else 作为其他预处理的剩余选项进行编译
    #elif 这是一种#else和#if的组合选项
    #line 改变当前的行数和文件名称
    #error 输出一个错误信息
    #pragma 为编译程序提供非常规的控制流信息

  • 文件包含预处理
    #include filename

  • 编译控制预处理

    1. #ifdef identifier
      your code
      #endif
  1. #ifndef identifier
    your code
    #endif

  2. #if expression
    your code
    #endif

  3. #ifdef identifier
    your code1
    #else
    your code2
    #endif

  4. #if expressin1
    your code1
    #elif expression2
    your code2
    #else
    your code3
    #enif

二、预处理头文件

在编译器汇编时 会将我们的源代码文件编译成.i接着编译成汇编文件,然后汇编成二进制文件,最后将所有的汇编的文件在链接到main二进制文件中,如果多次链接相同代码就会出现代码冗余,为了解决这类情况,就需要对头文件进行预处理了。
先看一段代码
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
这是没有控制预处理的 当我们运行时就会报错
在这里插入图片描述

进行控制预处理

在这里插入图片描述
这段代码意思是,在链接过程是如果没有定义宏A_H就定义一个宏A_H
如果定义了就会跳过这段代码(解决了链接时代码冗余)。
一般规定的书写规范是在进行宏定义时都是大写。
成功运行:
在这里插入图片描述

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Rain_ZZX

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

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

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

打赏作者

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

抵扣说明:

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

余额充值