VS下 _MSC_VER>1000和预编译的细微差异

最近在VS下开发过程中,碰到了一个陌生的东西,就是_MSC_VER

#if _MSC_VER > 1000
#pragma once
#endif

这段代码的意思是 如果微软的C编译器版本(MS 微软 C 编译器 VER版本 自身是一个宏定义,用来代表编译器版本信息)大于1000那么该文件只被预编译一次.但是为什么呢?原因有两点:

  1. 为了避免文件的重复包含,#pragma once由编译器提供保证(同一文件是指的是物理上的同一文件)
  2. 有些C编译器的版本过低不支持某些东西.
    与#pragma once 类似的是以下代码:
#ifndef  一些头文件的名称
#define  一些头文件的名称
  //一些声明
#endif

这种预处理的方式具有很好的平台移植性,但它可能会带来同名不同内容文件导致编译找不到声明的问题.

总结就是:
1.#pragma once 由编译器提供保证,它能够有效避免同名不同内容文件预编译时带来的问题,但它的移植性不好.也有可能出现同一文件多份拷贝导致文件重复包含的问题.
2.#ifndef #define #endif 的平台移植性很好,带可能会带来同名不同内容的文件导致编译器预编译时找不到声明的问题.
怎么用还是看个人需要吧.

你可能感兴趣的:(VS下 _MSC_VER>1000和预编译的细微差异)