预编译


(1)      宏定义

1.不带参数的宏定义

用一个宏名代替一个字符串,只进行简单的代换,不进行任何计算,也不进行正确性检查,双引号内的宏名不进行代换,宏名一般用大写表示。

#define PI 3.1415926

#define定义有效范围是定义处到源文件结束,通常写在文件开头,函数前,在此文件内有效。

#define PI 3.1415926

int main()

{

  return 0;

}

int main()

{

  #define PI 3.1415926

 return 0;

}

可以用#undef命令结束作用域。

#define PI 3.1415926

int main()

{

  return 0;

}

#undef PI

进行宏定义时,可以用已定义宏名,层层代换。

#define R 1

#define PI 3.1415926

#define L2*PI*R

 

2.带参数的宏定义

#define 宏名(参数表) 宏体

 

#define MUL(a, b) a*b

#define ADD(x, y) x+y

eg:sum = ADD(1, 2); 则被替换成sum = 2 + 4;

  sum = ADD(a+2, b+3);  sum = a + 2 + b + 3;

  t =MUL(a+1, b+1);  t = a+1*b+1;

注意:宏名与左括号之间不能出现空格。字符串中与参数名相同的字符序列适当的加上圆括号,这样可以避免代换后优先级上产生问题。

eg:#define MUL(x) (x)*(x)

#define MUL(x)((x)*(x))

 

(2)条件编译

利用条件编译可以使同一个源程序在不同条件下产生不同代码,来完成不同功能。利用条件编译可在调试程序时添加一些调试语句,以达到跟踪目的,但程序调试好后,重新编译时,使调试语句不参与编译。

1.#ifdef 宏名

     程序段1

 (#else  程序段2)

#endif

其功能为如果宏名已定义,则编译程序段1,否则程序段2.可提高程序通用性。

eg:#ifdef COMPUTER

     #define INTEGER_SIZE 16

#else

  #define INTEGER_SIZE 32

#endif

只要COMPUTER被宏定义过,则编译后INTEGER_SIZE被 16代替。

 

2. #ifdnef 宏名

     程序段1

 (#else  程序段2)

#endif

如果宏名没被定义则编译程序段1

 

3.#if 表达式

    程序段1

 [#else 程序段2]

#endif

表达式是一个常量表达式,其功能为:如果表达式的值不为0,则编译程序段1;否则,段2,各种条件编译可嵌套使用。

eg:#if x > 4

     #if x > 4 && x < 8

         int x = 5;

     #else

         int x = 2;

     #endif

#else

  int x = 100;

#endif

  

 

 

 

转载于:https://www.cnblogs.com/seebro/archive/2011/12/19/2476525.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值