ifndef和pragma once的作用与区别

本文探讨了ifndef和pragmaonce的区别,前者是C/C++语言内置的防止重复编译机制,而pragmaonce是微软编译器特有的实现高效编译的手段。它们分别影响编译效率和平台移植性。

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

ifndef

ifndef是c/c++语言中支持的宏定义。 格式大体如下:

#ifndef __X__
#define __X__ 
/*
...
*/
#endif

“ifndef”是“if not define” 的缩写。 作用就和字面意思一样。如果没有定义 则定义。
这样通过宏定义来避免一个文件被多次编译。
但是使用宏定义会有宏名冲突的问题,例如类似这样的

#define X 3
#define X 4

这里对X的宏定义重复进行,这样是会编译出错的。但是如果使用ifndef会导致有一个文件中相同名称的部分被忽略。

pragma once

“pragma once” 是微软编译器支持的,意思是对文件只编译一次。使用只需要在文件头处加一句即可。

#pragma once

当然因为是编译器提供支持的,这就意味着如果编译器不同就有可能出现报错。当换编译器或换平台时我们就需要修改代码。

区别

  • “ifndef”是c/c++提供的语言特性,“pragma”是编译提供支持。所以“ifndef”拥有更好的跨平台移植性。

  • “pragma”拥有更高的效率,当编译器遇到“ifndef”时,如果发现这个已经被编译,会一直向下忽略,直到遇到“endif” ,如果是使用“pragma once” 编译器会直接停止编译该文件。 也就是说,使用“ifndef”时 虽然没有编译第二遍, 但是文件依然是会被读取的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值