C语言杂谈——预处理程序

  1. 云栖社区>
  2. 博客>
  3. 正文

C语言杂谈——预处理程序

zting科技 2017-01-05 19:40:00 浏览589
展开阅读全文

预处理的三种用途:

1)处理宏常量及宏函数;

2)合并(include)源文件;

3)条件性编译。


(一)#define和#undef

宏常量

格式:

#define  别名  常数或符号

#define与typedef的区别:

  1. typedef char* STRING;  
  2. STRING pc1,pc2;  

这意味着pc1,pc2都是STRING类型的变量。

  1. #define STRING char*  
  2. STRING pc1,pc2;  

这意味着pc1是字符指针变量;pc2是char类型的变量。

带参数的宏

文字取代;

1)一般用法

  1. #define CLASS(type)  struct type  
  2.   
  3. CLASS(book)  
  4. {  
  5.     int pages;  
  6.     double length;  
  7.     double width;  
  8. }  

处理后变成为:

  1. struct book  
  2. {  
  3.     int pages;  
  4.     double length;  
  5.     double width;  
  6. }  

2)跨行的宏

使用“\”可将宏定义切分为数行。

如:

  1. //第一个宏  
  2. #define CLASS(type)\  
  3. struct type\  
  4. {  
  5. //第二个宏  
  6. #define END\  
  7. };  
  8.   
  9. //使用宏  
  10. CLASS(book)  
  11.     int pages;  
  12.     double length;  
  13.     double width;  
  14. END;  

预处理后:

  1. struct book  
  2. {  
  3.     int pages;  
  4.     double length;  
  5.     double width;  
  6. };  

3)##的用法

  1. //定义宏  
  2. #define FUN(type)\  
  3. type * type_function()  
  4.   
  5. //使用宏  
  6. FUN(int)  
  7. {  
  8.   
  9. }  

预处理后:

  1. int * type_function()  
  2. {  
  3.   
  4. }  

type_function是一个完整的名称,其中的type并不是参数。

  1. //定义宏  
  2. #define FUN(type)\  
  3. type * type##_function()  
  4.   
  5. //使用宏  
  6. FUN(int)  
  7. {  
  8.   
  9. }  

预处理后:

  1. int * int_function()  
  2. {  
  3.   
  4. }  

type##表明此type是参数。

 

定义数学表达式:

1)表达式必须用小括号括住;

2)参数必须用小括号括住;

3)参数中避免出现“++”“—”。

例:

  1. #define max(x,y)  ((x)>(y) ? (x):(y))  
  2. #define max3(x,y,z) max(max(x,y),(z))  

#undef (取消宏)

  1. #define PI 3.1415926  
  2.   
  3. #undef PI  

#define ~ #undef 说明宏的有效范围

 

(二)条件性编译

  1. #if  宏常量  
  2.   
  3. #else  
  4.   
  5. #endif  

条件编译的用途:

1)提高查错能力;

2)增加程序的可移植性。

 

(三)条件性定义

  1. #ifdef 宏  
  2. #ifndef 宏  
  3. #endif  
  4. #else  

用来解决(防止)重复定义。

作者:韩兆新
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
标签: C语言杂谈

本文转自韩兆新博客博客园博客,原文链接:http://www.cnblogs.com/hanzhaoxin/archive/2012/11/21/2781479.html,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论