- #pragma once 与#ifndef的作用一样,都可以避免同一个文件被include多次,但两者还是存在一些区别。如下表:
| 优点 | 缺点 | |
|---|---|---|
| #pragma | 不会出现宏名碰撞的问题 | 只能保证物理上的文件不重复,不能保证内容不重复(例如:一个文件有多份拷贝) |
| #ifndef | 受C/C++语言标准支持。它不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件(或者代码片段)不会被不小心同时包含。 | 1、每次都需要打开头文件才能判定是否有重复定义,因此在编译大型项目时,ifndef会使得编译时间相对较长 。 2、会出现宏名碰撞的问题,可能会导致头文件存在,编译器却找不到声明的状况 |
- #pragma region … / #endredion 可以折叠特定代码块
- #pragma message (messageString) 不中断编译的情况下,发送一个字符串到标准输出
- #pragma waring(…) 启用编译器警告消息的行为和选择性修改。
本文对比了#pragma once与#ifndef在防止头文件重复包含方面的优缺点。#pragma once简单高效,但不能确保内容一致性;#ifndef则能保障内容相同文件不被重复包含,但可能增加编译时间。
1075

被折叠的 条评论
为什么被折叠?



