关于#if _MSC_VER > 1000 #pragma once #endif

本文探讨了编译器预处理指令#pragma once的作用及其与传统防头文件重复包含方法的区别。解释了这两种方法如何帮助避免在多个头文件中重复定义同一类型的问题。

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

其中

_MSC_VER 表示VC的版本号。

#pragma once指示该文件只编译一次。

 

_MSC_VER > 1000 表示只有版本大于 1000 时才支持 #pragma once 这个指令。

 

#pragma once与下面一段的区别:

#if !defined(AFX_MYDLG_H__89AB5BE9_59BF_4B62_BCD9_EB6B0F550803__INCLUDED_)
#define AFX_MYDLG_H__89AB5BE9_59BF_4B62_BCD9_EB6B0F550803__INCLUDED_

.....

#endif

 

现在我是这么理解的:

它们两其实没有什么关系,

#pragma once 作用在编译器编译头文件时,指示文件只编译一次。

#if !defined  #define ..... #endif 用于防止包含重复的类,结构体,变量等。

 

比如在两个头文件(a.h 和 b.h )中定义相同的结构体 A,然后在第三个头文件 c.h 里包含 a.h 和 b.h 时,

如果用

#if _MSC_VER > 1000

#pragma once

#endif

编译器就会报错提示重复定义 A了。

 

但是如果用相同的

#ifndef A_S
#define A_S
...
#endif

加在头文件里,编译器就不会提示重复定义了。

 

当然一般我们是不会这样重复定义相同的数据结构,这里只是为了解释。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值