为了避免头文件的多次包含,我的一个朋友建议使用以下方法
#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
方法是特定于编译器的