| 特性 | #pragma once | #ifndef GUARD |
|---|---|---|
| 機制 | 編譯器識別物理文件 | 預處理器宏狀態檢查 |
| 可移植性 | 主流編譯器均支持(MSVC、GCC、Clang) | C/C++ 標準,全平台通用 |
| 同名不同文件 | 視為不同文件,會重複包含 | 宏名衝突則誤以為已包含 |
| 符號鏈接/拷貝 | 同一文件多路徑引用可能失效 | 宏名唯一則安全 |
| 編譯速度 | 略快(無需展開宏) | 極微差異,可忽略 |
#ifndef PROJECT_MODULE_FILENAME_H
#define PROJECT_MODULE_FILENAME_H
/* 头文件内容 */
#endif // PROJECT_MODULE_FILENAME_H
命名規範:項目_模塊_文件名_H,全大寫,杜絕衝突。
#ifndef 守衛,零風險#pragma once 更簡潔,無需維護宏名#pragma once
#ifndef PROJECT_MODULE_FILENAME_H
#define PROJECT_MODULE_FILENAME_H
...
#endif
_STDIO_H)#endif 導致後續文件被誤屏蔽