为了避免多个包含头文件,我的一位朋友建议采用以下方式
#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一次的目的 它给了我以下解释
“指定编译源代码文件时编译器仅包含(打开)一次文件。”
有人请告诉我哪种方法正确?如果两者都正确则有什么区别?一种方法比另一种更好吗?
答案 0 :(得分:6)
gcc已弃用pragma一次。你应该使用标准包括警卫。所有pragma指令都是按定义实现定义的。因此,如果您想要可移植性,请不要使用它们。
答案 1 :(得分:4)
Pragma是特定于编译器的,所以我使用#ifndef
。
预编译器指令在编译期间(实际上,之前)被解析,因此除了编译时间之外,它们在运行时没有区别。
但是,你永远不会注意到编译时间与这两种选择的区别,除非你猜它使用了几千次。
答案 2 :(得分:2)
第一种方法是适用于所有编译器的通用方法,也是较旧的编译器。 #pragma once
方法是特定于编译器的。