C++常见问题: #pragma once 和 #ifndef...#endif

文章比较了#pragmaonce和#ifndef...#endif两种防止头文件重复包含的方法。#pragmaonce非标准但效率高,适用于大部分编译器,而#ifndef是标准语法,依赖于唯一的宏定义。建议在类声明和定义分开时使用#pragmaonce。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#pragma once 和 #ifndef...#endif作用都是为了避免同一个被 #include 多次,或者避免头文件嵌套包含(参照前置声明的笔记)。需要特别注意的是:

(1)#pragma once 并不是C++的原生语法,而是编译器的一种支持,所以并不是所有的编译器都能够支持。#ifndef 则为C++的标准。

(2)#ifndef 依赖于不重复的宏名称,保证了包含在 #endif 的内容不会被重复包含,这个内容可以是一个文件的所有内容,或者仅仅是一段代码。而 #pragma once 则是针对物理文件的一个标记,标记该文件不会被 #include 多次,不能只针对文件中某段代码进行标记。而且,#pragma once 不能保证多个文件的拷贝不会被重复包含,但这种错误更容易发现,且 #pragma once 大大提高了编译效率。

(3)一般建议用 #pragma once,因为一个类声明和定义各占用一个物理文件,即使类声明之外的内容,也应该是和该类有关,比如非模板类中声明了模板接口,则需要在同一个文件定义该模板接口。

转载于知乎博主:

灵知子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值