黑马程序员——预处理程序

  预处理程序提供了一些工具,使用这些工具更易于开发、阅读、修改程序,也易于将程序移植到不同的系统中。

  预处理程序语句使用井号(#)标记,这个符号必须是一行中的第一个非空格字符。

#define

  #define语句的基本用途之一就是给符号名称指定程序常量

#define PI 3.1415926

 

 

  定义了名称PI,值为3.1415926,之后PI可用于程序中任何需要常量PI的地方。

area = PI * r * r;

  

  对常量值使用预定义名称有助于加强程序的扩展性

#define MAX_LENGTH 1000

 

  这样,所有的引用都可以以这个数组的大小为基础,并且根据这个预定义的值确定数组的有效下标。假如程序在任何需要用到数组大小的地方都使用MAX_LENGTH,如果后来需要修改数组的大小,程序中唯一必须改动的语句就是前面的定义。

#define经常放在程序开始,但在#import或include之后,这并不是必须的,它可以出现在程序的任何地方。但要注意,需要使用这个名称之前,必须先定义它。

 

  使用预定义需要注意,预定义其实是进行文本替换,因此通常不能使用分号结束#define语句。

#define PI 3.1415926;
// 使用PI时,会将PI替换为3.1415926;
area = PI * r * r;
// 替换为 area = 3.1415926; * r * r;

这样会导致语法错误。

  带有参数的预定义,通常称为宏。宏定义需要特别小心。如

#define SQUARE(x) x*x

这个宏定义虽然看上去简单明了,但是不注意很出现问题

y = SQUARE(4+1);
// 实际上,替换文本后,上面的表达式会变成
// y = 4+1*4+1;
// y = 9;

 

给x加上括号

#define SQUARE(x) (x)*(x)

 

那么这样修改后还会有问题吗?会的。

y = SQUARE(5) / SQUARE(5);
// y = (5)*(5)/(5)*(5);
// y = 25; 也得不到预期的结果。

 

因此,整个表达式还需要一对括号。

#define SQUARE(x) ((x)*(x))

 

posted @ 2015-10-12 21:25  丿繁华落尽  阅读(164)  评论(0)    收藏  举报