C语言预处理与宏指令详解
需积分: 3 30 浏览量
更新于2024-11-11
收藏 4KB TXT 举报
"C语言常见预处理和宏"
在C语言中,预处理是编译过程的第一步,它处理源代码中的特殊指令,并进行文本替换、条件编译等操作。预处理指令通常以`#`开头,包括宏定义、包含文件、条件编译等。
1. **预处理指令**
- `#define`:用于定义宏,可以将某个标识符替换为指定的文本。例如:
```c
#define PI 3.14159
```
在后续代码中,`PI`会被替换为`3.14159`。
- `#undef`:取消宏定义。
- `#ifdef`, `#ifndef`, `#endif`:用于条件编译,只有当宏被定义或未定义时,才执行相应的代码块。
2. **宏展开**
- 宏有两种类型:函数式宏和对象式宏。函数式宏带有参数,如:
```c
#define SQUARE(x) ((x) * (x))
```
- 对象式宏没有参数,直接替换标识符,如:
```c
#define MAX 100
```
3. **预定义宏**
- `__FILE__`:当前源文件的路径,以字符串形式表示。
- `__LINE__`:当前源代码的行号。
- `__DATE__`, `__TIME__`:编译时的日期和时间,分别以字符串形式表示。
- `__STDC__`:如果编译器符合ANSI C标准,其值为1。
- `__cplusplus`:如果编译器支持C++,其值为1。
4. **包含文件**
- `#include <filename.h>`:系统头文件,通常包含在系统库中,搜索路径为系统路径。
- `#include "filename.h"`:用户自定义头文件,优先在当前目录搜索,其次在系统路径中搜索。
5. **示例代码**
- `per_process.c` 文件展示了如何在C程序中使用预处理指令,如`__FILE__`, `__LINE__`, `__DATE__`, `__TIME__`, `__STDC__`, `__cplusplus`等,以及针对不同编译器的条件编译。
6. **条件编译**
- `#ifdef _MSC_VER`: 检查是否为Microsoft Visual Studio编译器。
- `#ifdef __BORLANDC__`: 检查是否为Borland C++编译器。
7. **宏扩展的副作用**
- 宏展开可能引起意料之外的结果,尤其是在处理表达式时,因为宏展开是文本替换,不考虑运算符优先级和括号。因此,使用宏时需要注意避免副作用,例如,不要在宏定义中使用副作用的表达式。
8. **总结**
- C语言的预处理是编程中不可或缺的一部分,它增强了代码的可移植性和可维护性,同时也需要注意宏可能导致的潜在问题。理解并正确使用预处理指令是编写高效、可靠的C程序的关键。
2021-09-19 上传
2021-09-30 上传
点击了解资源详情
2021-05-22 上传
点击了解资源详情
点击了解资源详情
2023-06-09 上传
2012-04-18 上传
2015-07-12 上传
ziven18
- 粉丝: 19
- 资源: 24
最新资源
- 编程之道全本 by Geoffrey James
- JBoss4.0 JBoss4.0 JBoss4.0 JBoss4.0 JBoss4.0
- DWR中文文档,DWR中文文档
- 汉诺塔问题 仅限11个盘子 效率较高
- 生化免疫分析仪——模数转换模块设计
- ajax基础教程.PDF
- symbian S60编程书
- 智能控制\BP神经网络的Matlab实现
- matlabziliao
- PowerBuilder8.0中文参考手册.pdf
- NNVVIIDDIIAA 图形处理器编程指南(中文)
- UMl课件!!!!!!!!!
- 电工学试卷及答案(电工学试卷2007机械学院A卷答案)
- 高质量C++编程指南.pdf
- 大公司的Java面试题集.doc
- 基于UBUNTU平台下ARM开发环境的建立