使用一次#pragma或#ifndef #endif是有效的



为了避免头文件的多次包含,我的一个朋友建议使用以下方法

  #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的目的时它给了我如下的解释

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

谁能告诉我哪一种方法是正确的?,如果两者都是正确的,那么区别是什么?一种方法比另一种方法好吗?

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

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

预处理器指令在编译期间(实际上是在编译之前)被解析,因此它们在运行时中不会产生差异,除了编译时间。

但是,除非您使用它们几千次,否则您永远不会注意到这两个替代方案在编译时间上的差异。

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

相关内容

最新更新