今天看项目源码的时候发现有些地方用了do{} while(false)的用法,查了下发现这样确实有些优点,mark下。 1.最重要的优点,用在略微复杂的宏定义中。 2.当你执行一段代码到一半,想跳过剩下的一半的时候,如果你正处于do while循环中,则能用break达到这个目的。如下伪代码: 避免 ...
分类:
其他好文 时间:
2016-10-04 15:59:40
阅读次数:
146
1. 关于C++中的宏定义,宏展开还是有一些奇淫技巧的。参考:#define命令的一些高级用法。 2. 宏定义更多的还是用于预编译处理中,就是为了防止头文件被重复包含那种。 3. 关于C++中头文件、库函数、命名空间的关系 知乎上有人这样说道:头文件是编译时编译器的预处理部分要用的,库文件是链接器要 ...
分类:
其他好文 时间:
2016-10-01 17:00:20
阅读次数:
153
幻数,英文原称为magic numbers,也被称为魔数。 其定义是源程序中的一些具体的数据,因为除了写源程序的作者之外,其他人可能根本不知道这些数据的含义是什么,所以这些立即数据称为幻数/魔数。幻数/魔数的存在会影响程序的可读性,所以通常会利用宏定义来代替这些幻数/魔数。 ...
分类:
其他好文 时间:
2016-10-01 16:56:58
阅读次数:
222
预处理过程时,会做以下事情或着更多: 将所有的#define删除,并且展开所有的宏定义; 处理所有条件编译指令,如#if,#ifdef等; 处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。该过程递归进行,及被包含的文件可能还包含其他文件。 删除所有的注释//; 添加行号和文件... ...
分类:
其他好文 时间:
2016-09-29 17:52:47
阅读次数:
192
宏的命名规范:一般以项目前缀开头,key结尾。 #开头表编译。 宏的用法:1、定义常用字符串。 2、定义一段代码。 const与宏的区别:1、编译时刻:宏-预编译 const-command+b(编译阶段)编译。 2、宏不会检查代码错误,只是替换,但是const会编译报错。 3、宏的好处:定义代码或 ...
分类:
其他好文 时间:
2016-09-27 00:37:15
阅读次数:
141
大家知道,我们写.h文件时,通常会加上防卫式声明,有以下两种方式: 1. 宏定义 2. 编译器指令 但是,为什么头文件中需要添加这种防卫式声明呢?如果没有这样的声明,会出现怎样的问题。这里,先看一个例子。 -- "Car.h",代码如下(并没有添加防卫式声明): -- "Person.h",代码如下 ...
分类:
编程语言 时间:
2016-09-26 23:03:24
阅读次数:
219
总结几种log打印printf函数的宏定义 http://blog.chinaunix.net/uid-20564848-id-73402.html ...
分类:
编程语言 时间:
2016-09-25 20:23:09
阅读次数:
195
使用宏的目的是什么? 由于实际开发中,有时候一些设置信息需要重复使用(例如设置打印信息、配置颜色、配置宽度等),如果每次都手动去敲每次都去创建会很麻烦。虽然宏使用的时候会占用内存,可是目前来说大部分开发者都在使用。 1.创建PCH 文件 2.打开配置面板 按照下图操作 3.按照下图找到相关配置 4. ...
分类:
其他好文 时间:
2016-09-25 17:11:59
阅读次数:
114
1. #运算符 (1)#运算符用于在预处理期将宏的参数转换为字符串 (2)#的转换作用是在预处理期完成的,因此只在宏定义中有效,即其他地方不能用#运算符 (3)用法:#define STRING(x) #x printf("%s\n",STRING(Hello World!));//注意,Hello ...
分类:
编程语言 时间:
2016-09-24 16:17:08
阅读次数:
189
1. C 语言中的宏定义 (1)#define 是预处理器处理的单元实体之一(因此,预处理器只是简单的进行替换,并不(2)#define 定义的宏可以出现在程序的任意位置(包括函数体的内部)(3)#define 定义之后的代码都可以使用这个宏 2. 定义宏常量 (1)#define 定义的宏常量可以 ...
分类:
编程语言 时间:
2016-09-24 14:55:42
阅读次数:
126