Objective-C 学习笔记 12 预处理程序
来源:互联网 发布:ubuntu上安装mysql5.7 编辑:程序博客网 时间:2024/05/08 23:55
12.1 #define 语句
“#define TRUE 1
定义名称TRUE 使它等于值1。
gameOver = TRUE;
使用了预定义名称TRUE,指定值TRUE给gameOver。
预定义后面没有分号。给TRUE赋值也没有用等号。
,#define 语句很特别,经常放在程序开始的地方,#import 或者include之后,这并不是必须的,也可以放在程序的任何地方,但是在程序引用这个名称之前,必须先定义它们,预定义名称没有局部定义的说法,在定义一个名称之后,就可以在程序的任何地方使用它。
习惯上,程序员喜欢把大写字母作为常量名称这样更加容易区分,预定义名。或者在定义之前加上字母k。
12.1.2更高级的定义类型
预定义一个表达式,预定义本身也可以作为预定义的值。或者是一个字符。
,#define TWO_PI 2.0 * 3.14
,#define PI 3.14
,#define TWO_PI 2.0 * PI
如果预定义程序假设定义包含在程序的一行中,如果需要第二行,那么上一行的最后一个字符必须是反斜线符号。
if (year % 4 ==0 && year %100 != 0 || year % 400 ==0)
…
,#define IS_LEAP_YEAR year % 4 == 0 && year %100 != 0 \ ||year % 400 ==0
在执行带有参数的预定义时,预定义名称和参数列表的左括号之间不能有空格。
,#define ,#define IS_LEAP_YEAR(y) y % 4 == 0 && y % 100\ != 0 || y % 400 ==0
这里没有定义参数类型,所以只是执行字面上的替换。
按照前面的语句可以编写如下:
if ( IS_LEAP_YEAR(year) )
…
只要出现y,就用year来替换它。
在定义宏时,有一个有趣的陷阱。
,#define SQUARE(x) x * x
y = SQUARE(v);
把v * v 赋值给y ,如果是以下语句:
y = SQUARE(v + 1)
这样的语句并不会想期望的那样,把(v + 1)的平方赋值给y,因为预处理程序是对宏定义的参数实行文本替换,会得到以下求值:
y = v + 1 * v + 1;
要解决这个问题我们要在定义中加入括号:
,#define SQUARE(x) ( (x) * (x) )
条件编译
,#ifdef, #endif ,#else, #ifndef语句
- Objective-C 学习笔记 12 预处理程序
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十二章 预处理程序
- Objective-C预处理程序
- objective-C [预处理程序]
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之12-预处理程序——黑马 IOS 技术博客
- Objective-C基础—预处理程序
- Objective-C学习笔记
- Objective-C 学习笔记
- Objective-C学习笔记
- objective c 学习笔记
- Objective-C 学习笔记
- Objective-C学习 笔记
- Objective-c学习笔记
- Objective-c学习笔记
- Objective-C 学习笔记
- Objective C 学习笔记
- Objective-C学习笔记
- Objective-C 学习笔记
- 最长公共子序列
- NSDate的一个分类,判断是否是今天,昨天,今年,获得与当前时间的差距,返回一个只有年月日的日期
- hdu4099(trie树,斐波那契数列)
- B\S备忘录28——EF强行多租户效果?谁来进谁的库
- C++中不能被声明为虚函数的函数
- Objective-C 学习笔记 12 预处理程序
- OC-字符串集合补充
- 测试基础 黑盒测试
- 让Linq的OrderBy支持动态字段
- 小谈反射机制
- 黑马程序员-------C语言----指针做函数参数
- 修改编辑框禁用状态文字颜色的方法
- 动态规划:从新手到专家
- 自学QT之数字时钟