可复用代码,实现相对独立和短小的功能。
8.1 宏定义
编译阶段工作:
- 预处理,预先处理特殊代码|命令(特殊能力,特殊功能)。
- 编译,词法分析、语法分析、目标代码生成、优化等
- 汇编,产生.obj文件
C语言三种预处理功能:宏定义、文件包含、条件编译。通过在源代码文件写入代码(特殊代码,“#”开头)实现。
8.1.1 无参宏定义
指定宏名(标识符)代替一串内容。
#define 宏名 被替换的内容
#define PI 3.1415926
#define PI 3.1415926
int main() {
printf("%f", PI * 2);
return 0;
}
#undef PI
void func() {
printf("%f", PI);
}
#define PI 3.1415926
#define DPI 2 * PI
#define DPICPI PI * DPI
#define PI 3.1415926
char tmp[100] = "PIPI";
printf("%s\n", tmp);
8.1.2 带参宏定义
进行内容替换和参数替换。
#define 宏名(参数表) 被替换的内容
#define S(a,b) a*b
int Area = S(3,2);
#define PI 3.1415926
#define S(r) PI * r * r
float area = S(3.6);
#define PI 3.1415926
#define S(r) PI * r * r
S(5+1)被替换为
3.1415926 * 5+1 * 5+1
#define S(r) ( (PI) * (r) * (r) )
S(5+1)被替换为
( (3.1415926) * (5+1) * (5+1) )
#define MACROTEST do {\
printf("test\n");\
}
.
8.2 文件包含和条件编译
8.2.1 文件包含
将另外的文件包含到本文件中。
#include "文件名"
- <>系统目录查找
- ""优先当前目录,然后系统目录查找
8.2.2 条件编译
对部分内容满足一定条件才进行编译。
#ifdef 标识符
程序段1(一堆代码)
#else
程序段2(一堆代码)
#endif
#ifdef 标识符
程序段1(一堆代码)
#endif
#define DEBUG
#ifdef DEBUG
printf("debug\n")
#endif
#ifndef 标识符
程序段1(一堆代码)
#else
程序段2(一堆代码)
#endif
#ifndef 标识符
程序段1(一堆代码)
#endif
#ifndef DEBUG
printf("debug\n")
#endif
#if 表达式
程序段1(一堆代码)
#else
程序段2(一堆代码)
#endif
#if 表达式1
程序段1(一堆代码)
#elif 表达式2
程序段2(一堆代码)
#else
程序段3(一堆代码)
#endif
#define MYPI 1
#if MYPI
printf("MYPI is defined\n")
#else
printf("MYPI is not defined\n")
#endif
#if _WIN32
printf("windows平台\n");
#elif __Linux__
printf("linux平台\n");
#else
#endif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)