【编译器角度】预处理指令逻辑
前言
预处理:
1 |
诸如此类命令。
正文
ifdef
一般都出现在头文件。主要是为了防止重复。
1 |
像这样在头文件定义后,除非源文件有#define _HH_
不然里面的内容是无效的。
1 |
|
然后if与else配套传统,如果不存在,就还有一种结果。
ifndef
最早可能用过这种,#ifndef是"if not defined"
的简写。
在特殊场合多次包含中,可能会这么用
1 |
|
该段代码意思是:如果_HH_没有被定义,则重定义_HH_,即执行语句2、语句3;如果_HH_已经被定义,则直接跳过语句2、语句3,直接执行语句4…
当然这种处理方式就可以不用老实呆在头文件里,你可以放到源文件去处理一些事情
1 |
|
像这种提前预定义编码环境的时候就可以规范一下格式
二者的区别就在于项目属性里更改使用的字符环境是能看到#ifdef反馈的高亮情况。
if
1 |
|
预处理的if虽然也能使用逻辑运算符,但是跟常规if相比,他毕竟是预处理的指令,不会被编译。
使用这种好处自然是针对项目开发时,没必要废弃旧版本,就有些人用老的,那么有些功能的实现就可能依赖老版本环境。
elif
这个跟上面的if配套的,就是elseif一样的操作
1 |
|
实际上也就是更精确控制,但是绝大部分下应该用不了这么多。
除此之外就是既然可以使用基本的逻辑表达式,所以相对的基本的加减去改变自然也行得通
1 |
|
结语
预处理用的不多,但是要知道能配套使用,且配套使用的时候要形成闭环,不然又是个逻辑鬼才。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Box'Blog!
评论