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

其中

_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

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

 

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

 

 

你可能感兴趣的:(数据结构,编译器)