文章目录
- 什么是预处理
- 宏定义#define
- #undef
- #include
- 条件编译
- #error
- #pragma
什么是预处理
主要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。
C 编译系统在对程序进行通常的编译之前,首先进行预处理。
c 提供的预处理功能主要有以下三种:
何时需要预编译:
在c语言中有如下预处理指令
下面介绍几个常用的预处理指令
一. 宏定义(#define)
常用的宏定义有以下几种:
①宏常量
例如
#include"stdio.h"
#define A 10
int main()
{
printf("A = %d" , A);//在预处理时,A会被转化为 10
return 0;
}
结果如下
②宏语句
例如
#include <stdio.h>
#define Print(str) printf("%s", str)
int main()
{
Print("这是一个宏定义的输出语句");//在程序预处理时会变为printf("%s", str);
return 0;
}
结果如下
③宏函数
例如
#include <stdio.h>
#define ADD(x, y) x + y
int main()
{
printf("%d", ADD(10, 20));
return 0;
}
结果如下
二、#undef
在实际应用中可以按照以下方式使用
1. 防止宏定义冲突
在一个程序块中用完宏定义后,为防止后面标识符冲突需要取消其宏定义。
#include <stdio.h>
int main()
{
#define MAX 200
printf("MAX = %d\n", MAX);
#undef MAX
int MAX = 10;
printf("MAX = %d\n", MAX);
return 0;
}
2. 增强代码可读性
在同一个头文件中定义结构类型相似的对象,根据宏定义不同获取不同的对象,主要用于增强代码的可读性。
#include <stdio.h>
#define MING
#include "student.h"
#undef MING
#define HONG
#include "student.h"
#undef HONG
int main()
{
printf("Xiao Ming's age is %d.\n", MING_AGE);
printf("Xiao Hong's age is %d.\n", HONG_AGE);
return 0;
}
三、#include
四、条件编译
1.#ifdef 标识符1 && #ifndef 标识符2
2.#if 常量表达式
五、#error
六、#pragma
1.#pragma once
2.#pragma warning
具体示例:
3.#pragma pack
#pragma的用法不止以上三种,它还有其他的使用方法,这里就不一一介绍了,只介绍常用的相关用法。
以上带来的就是预处理的相关介绍。