预处理 & 条件变量 & 宏

预处理指令

程序员所编写的代码并不能被真正编译器所编译,所以需要一段程序把代码翻译一下。

翻译的过程叫做预处理,被翻译的代码叫做预处理指令,以#开头的都是预处理指令。

查看预处理的结果:

​ gcc -E code.c 直接把预处理结果显示到终端上

​ gcc -E code.c -o code.i 把预处理的结果储存到code.i 文件中

预处理指令的分类:

​ #include 文件包含

​ #include <> 从系统指定的目录下查找并导入头文件

​ #include “” 先从文件当前目录下查找,找到了就导入该头文件;如果找不到,再从系统指定的目录下查找 并导入头文件

​ 操作系统通过环境变量来指定头文件的查找路径,或者通过设置编译参数来指定头文件的查找路径 -I /path

.bashrc
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/home/ubuntu/C/day13

#define 定义宏

​ 宏常量: #define MAX 100

​ 优点:提高代码的扩展性(方便批量修改)、提高可读性、提高安全性、还可以在case后面使用 case MAX:

​ 注意:一般宏名全部大写,末尾不要加分号

​ 【局部变量全部大写、全局变量首字母大写、指针变量+p、数组arr、字符串str、函数名全部小写加下划 线】

预定义好的宏:

​ __ func __ 获取函数名

​ __ FILE __ 文件名

​ __ LINE __ 当前符号

​ __ DATE __ 当前日期

​ __ TIME __ 运行时间

宏函数:

其实就是带参数的宏

​ 宏函数并不是真正的函数,不检查参数类型,没有传参,没有返回值,只有计算的结果。

​ 1、把代码使用到的宏函数替换为,宏函数后面的代码

​ 2、再把宏函数代码中使用到的参数替换为调用者提供的参数

宏函数的二义性:

​ 由于宏函数所处的位置、参数不同导致宏有不同的功能,这叫做宏的二义性

如何避免二义性:

​ 1、宏函数整体加小括号,每个参数都加小括号

​ 2、使用宏函数时,不要提供带自变运算符的变量作为参数

​ 注意:容易出选择题,例如:哪个宏有二义性、宏函数的计算结果

​ 运算符:

​ # 把宏函数的参数变成字符串

​ ## 合并两个参数变成标识符 (连接)

条件编译:

​ 根据条件决定哪些代码是否参与最终的编译

版本控制: 
    #if 
    #elif
    #else 
    #endif

头文件卫士: 防止头文件被重复包含
    #ifndef FILENAME_H
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值