使用#pragma一次或#ifndef #endif有效吗?

时间:2011-04-04 10:16:07

标签: visual-c++ mfc

为了避免多个包含头文件,我的一位朋友建议采用以下方式

  #ifndef _INTERFACEMESSAGE_HPP
  #define _INTERFACEMESSAGE_HPP
  class CInterfaceMessage
  {
     / /Declaration of class goes here
  //i.e declaration of member variables and methods 
   private:
   int m_nCount;
     CString m_cStrMessage;
    public:
    CString foo(int);
 }
   #endif

其中_INTERFACEMESSAGE_HPP只是一个标识符

但是当我使用visual studio 2005 IDE声明一个类时,我得到一个声明为      #pragma一次 在类定义的开头 当我借msdn的帮助找到#pragma一次的目的 它给了我以下解释

“指定编译源代码文件时编译器仅包含(打开)一次文件。”

有人请告诉我哪种方法正确?如果两者都正确则有什么区别?一种方法比另一种更好吗?

3 个答案:

答案 0 :(得分:6)

gcc已弃用pragma一次。你应该使用标准包括警卫。所有pragma指令都是按定义实现定义的。因此,如果您想要可移植性,请不要使用它们。

答案 1 :(得分:4)

Pragma是特定于编译器的,所以我使用#ifndef

预编译器指令在编译期间(实际上,之前)被解析,因此除了编译时间之外,它们在运行时没有区别。

但是,你永远不会注意到编译时间与这两种选择的区别,除非你猜它使用了几千次。

答案 2 :(得分:2)

第一种方法是适用于所有编译器的通用方法,也是较旧的编译器。 #pragma once方法是特定于编译器的。