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

简介:

预处理的三种用途:

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  

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

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

本文转自韩兆新博客博客园博客,原文链接:http://www.cnblogs.com/hanzhaoxin/archive/2012/11/21/2781479.html,如需转载请自行联系原作者
目录
相关文章
|
29天前
|
C语言
最简单的C语言程序示例
最简单的C语言程序示例
19 0
|
29天前
|
Serverless C语言
C语言程序通常具有以下基本结构
C语言程序通常具有以下基本结构
10 0
|
1月前
|
C语言 C++
第一个c语言程序
第一个c语言程序
|
1月前
|
程序员 编译器 C语言
C语言的程序常量
C语言的程序常量
10 0
|
11天前
|
存储 编译器 C语言
深入探索C语言动态内存分配:释放你的程序潜力
深入探索C语言动态内存分配:释放你的程序潜力
26 0
|
1月前
|
C语言
C语言最基本程序控制结构
C语言最基本程序控制结构
13 0
|
28天前
|
存储 Serverless C语言
C语言程序的结构
C语言是一种广泛使用的编程语言,其程序结构清晰,易于理解。下面我们将详细探讨C语言程序的基本结构,并通过一个示例代码来展示这些组成部分是如何协同工作的。 一、C语言程序的基本结构
14 0
|
28天前
|
程序员 C语言
最简单的C语言程序举例
C语言是一种广泛使用的计算机编程语言,适合用于系统编程,也可以用于编写应用程序。它的语法清晰明了,功能强大,是很多程序员的首选语言。下面,我们将通过一个最简单的C语言程序来介绍其基本结构和语法。
26 0
|
28天前
|
前端开发 Unix Linux
Linux indent命令 (格式化C语言源代码的程序)
Linux indent命令 (格式化C语言源代码的程序)
18 0
Linux indent命令 (格式化C语言源代码的程序)
|
1月前
|
存储 编译器 C语言