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

kar*_*hik 6 mfc visual-c++

为了避免多个包含头文件,我的一位朋友提出了以下方法

  #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
Run Code Online (Sandbox Code Playgroud)

其中_INTERFACEMESSAGE_HPP只是一个标识符

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

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

有人请告诉哪个是正确的方法?如果两者都正确那么有什么区别?一种方法比另一种更好?

kar*_*hik 6

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

  • 自gcc 3.4以来不再弃用,请参阅http://gcc.gnu.org/gcc-3.4/changes.html (8认同)