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,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
存储 自然语言处理 编译器
【C语言】编译与链接:深入理解程序构建过程
【C语言】编译与链接:深入理解程序构建过程
|
3月前
|
编译器 C语言
C语言--预处理详解(1)
【10月更文挑战第3天】
|
3月前
|
编译器 Linux C语言
C语言--预处理详解(3)
【10月更文挑战第3天】
|
3月前
|
自然语言处理 编译器 Linux
【C语言篇】编译和链接以及预处理介绍(上篇)1
【C语言篇】编译和链接以及预处理介绍(上篇)
50 1
|
5月前
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
125 1
|
5月前
|
NoSQL 编译器 程序员
【C语言】揭秘GCC:从平凡到卓越的编译艺术,一场代码与效率的激情碰撞,探索那些不为人知的秘密武器,让你的程序瞬间提速百倍!
【8月更文挑战第20天】GCC,GNU Compiler Collection,是GNU项目中的开源编译器集合,支持C、C++等多种语言。作为C语言程序员的重要工具,GCC具备跨平台性、高度可配置性及丰富的优化选项等特点。通过简单示例,如编译“Hello, GCC!”程序 (`gcc -o hello hello.c`),展示了GCC的基础用法及不同优化级别(`-O0`, `-O1`, `-O3`)对性能的影响。GCC还支持生成调试信息(`-g`),便于使用GDB等工具进行调试。尽管有如Microsoft Visual C++、Clang等竞品,GCC仍因其灵活性和强大的功能被广泛采用。
163 1
|
5月前
|
编译器 C语言 计算机视觉
C语言实现的图像处理程序
C语言实现的图像处理程序
250 0
|
2月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
89 5
|
2月前
|
C语言
C语言编程中,错误处理至关重要,能提升程序的健壮性和可靠性
C语言编程中,错误处理至关重要,能提升程序的健壮性和可靠性。本文探讨了C语言中的错误类型(如语法错误、运行时错误)、基本处理方法(如返回值、全局变量、自定义异常处理)、常见策略(如检查返回值、设置标志位、记录错误信息)及错误处理函数(如perror、strerror)。强调了不忽略错误、保持处理一致性及避免过度处理的重要性,并通过文件操作和网络编程实例展示了错误处理的应用。
84 4
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
83 1

热门文章

最新文章