44 lines
1.2 KiB
Markdown
Raw Normal View History

# 预编译指令
## 目录
- [define](#define)
- [预定义宏](#预定义宏)
- [ifdef](#ifdef)
- [ifndef](#ifndef)
- [undef](#undef) : 若要修改一个宏,先移除再定义
- [endif](#endif)
- [pragma](#pragma)
- [error](#error)
- [warning](#warning)
## define
### 预定义宏
1. 平台相关
+ `__STDC__` 如果编译器遵循ANSI C标准则定义为1
+ `__cplusplus` 如果编译器支持C++,则定义为一个版本号 如199711L表示C++98201103L表示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++中,包含当前函数的完整声明
## pragma
`#pragma once` 确保头文件只被包含一次