2025-04-04 17:35:35 +08:00
|
|
|
|
# 预编译指令
|
|
|
|
|
|
2025-05-10 09:56:15 +08:00
|
|
|
|
## index
|
2025-04-04 17:35:35 +08:00
|
|
|
|
- [define](#define)
|
|
|
|
|
- [预定义宏](#预定义宏)
|
2025-05-09 18:07:44 +08:00
|
|
|
|
- [defined](#defined)
|
2025-04-04 17:35:35 +08:00
|
|
|
|
- [ifdef](#ifdef)
|
|
|
|
|
- [ifndef](#ifndef)
|
2025-04-22 16:38:36 +08:00
|
|
|
|
- [undef](#undef) : 若要修改一个宏,先移除再定义
|
2025-04-04 17:35:35 +08:00
|
|
|
|
- [endif](#endif)
|
|
|
|
|
- [pragma](#pragma)
|
|
|
|
|
- [error](#error)
|
|
|
|
|
- [warning](#warning)
|
|
|
|
|
|
|
|
|
|
## define
|
2025-04-24 13:44:00 +08:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2025-04-04 17:35:35 +08:00
|
|
|
|
### 预定义宏
|
|
|
|
|
1. 平台相关
|
|
|
|
|
+ `__STDC__` 如果编译器遵循ANSI C标准,则定义为1
|
|
|
|
|
+ `__cplusplus` 如果编译器支持C++,则定义为一个版本号 如199711L表示C++98,201103L表示C++11等
|
|
|
|
|
+ `_WIN32` 在Windows平台下定义,表示目标系统是32位或64位
|
|
|
|
|
+ `_WIN64`
|
|
|
|
|
+ `__unix__`
|
|
|
|
|
+ `__linux__`
|
|
|
|
|
+ `__APPLE__`
|
|
|
|
|
|
|
|
|
|
2. 编译器相关
|
|
|
|
|
+ `__GNUC__` 如果编译器是GCC,则定义为GCC的主版本号
|
|
|
|
|
+ `__clang__` 如果编译器是Clang
|
|
|
|
|
+ `_MSC_VER` 如果编译器是Microsoft Visual C++,则定义为一个版本号
|
|
|
|
|
+ `__ICC` 如果编译器是Intel C/C++ Compiler,则定义
|
|
|
|
|
|
|
|
|
|
3. 文件和行号相关的预定义宏
|
|
|
|
|
+ `__FILE__` 当前文件的名称
|
|
|
|
|
+ `__LINE__` 当前文件的行号
|
|
|
|
|
+ `__DATE__` 编译日期
|
|
|
|
|
+ `__TIME__` 编译时间
|
|
|
|
|
|
|
|
|
|
4. 其他
|
|
|
|
|
+ `__func__` `__FUNCTION__` 当前函数的名称
|
|
|
|
|
+ `__PRETTY_FUNCTION__` 在C++中,包含当前函数的完整声明
|
|
|
|
|
|
2025-04-24 13:44:00 +08:00
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### defined
|
|
|
|
|
|
|
|
|
|
如果一个宏被定义,则 `defined(<MACRO_NAME>)` 返回真
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2025-04-04 17:35:35 +08:00
|
|
|
|
## pragma
|
2025-05-09 18:07:44 +08:00
|
|
|
|
由编译器定义的预处理指令,若不支持则无操作
|
2025-04-04 17:35:35 +08:00
|
|
|
|
|
|
|
|
|
`#pragma once` 确保头文件只被包含一次
|