---
title: 预处理
date: 2024-06-06T23:51:35Z
tags: []
---

## 预定义宏

|   名称   | 描述                                                |
| :------: | --------------------------------------------------- |
| **DATE** | 当前日期，一个以 "MMM DD YYYY" 格式表示的字符常量。 |
| **TIME** | 当前时间，一个以 "HH:MM:SS" 格式表示的字符常量。    |
| **FILE** | 这会包含当前文件名，一个字符串常量。                |
| **LINE** | 这会包含当前行号，一个十进制常量。                  |
| **STDC** | 当编译器以 ANSI 标准编译时，则定义为 1。            |

## 预处理器运算符

|     名称     | 运算符 | 描述                                                                           |
| :----------: | :----: | ------------------------------------------------------------------------------ |
|    宏延续    | ​`\`​  | 一个宏通常写在一个单行上。但是如果宏太长，一个单行容纳不下，则使用宏延续运算符 |
| 字符串常量化 | ​`#`​  | 在宏定义中，当需要把一个宏的参数转换为字符串常量时，则使用字符串常量化运算符   |
|   标记粘贴   | ​`##`​ | 宏定义内的标记粘贴运算符,会合并左右两个参数                                    |

## 预处理器指令

‍

```c
#define 定义宏
#include 包含一个源代码文件
#undef 取消已定义的宏
#ifdef 如果宏已经定义，则返回真
#ifndef 如果宏没有定义，则返回真
#if 如果给定条件为真，则编译下面代码
#else #if 的替代方案
#elif 如果前面的 #if 给定条件不为真，当前条件为真，则编译下面代码
#endif 结束一个 #if……#else 条件编译块
#error 当遇到标准错误时，输出错误消息
#pragma 使用标准化方法，向编译器发布特殊的命令到编译器中
```
