在每个头文件的开头有这些东西:
#if !defined(AFX_MAINDLG_H__7FFD2FC7_8C06_11D6_B7CA_0050BA40CCBD__INCLUDED_)
#define AFX_MAINDLG_H__7FFD2FC7_8C06_11D6_B7CA_0050BA40CCBD__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
意思如下:
1、
#if !defined(AFX_MAINDLG_H__7FFD2FC7_8C06_11D6_B7CA_0050BA40CCBD__INCLUDED_)
#define AFX_MAINDLG_H__7FFD2FC7_8C06_11D6_B7CA_0050BA40CCBD__INCLUDED_
// 文件内容
#endif
只是将符号AFX_MAINDLG_H__7FFD2FC7_8C06_11D6_B7CA_0050BA40CCBD__INCLUDED_与该头文件捆绑起来而已。如果此次编译包含过此头文件,该符号肯定定义过了,文件内容就不被编译,如果没有,就编译该文件内容。
2、
#pragma once
相同,也是使该文件在一次编译过程中只编译一次。参考MSDN"#pragma"
(#if _MSC_VER > 1000...#endif 是判断当前VC版本是否支持)
3、
#ifdef _DEBUG
#define new DEBUG_NEW
是MFC提供的调试用new算符,提供内存泄漏监测等等。参看:
void* AFX_CDECL operator new(size_t nSize, LPCSTR lpszFileName, int nLine);
#define DEBUG_NEW new(THIS_FILE, __LINE__)
4、
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
标准C++中,__FILE__,__LINE__是两个预定义宏,分别表示当前源文件路径名和行号,比如执行printf("file=%s,line=%d",__FILE__,__LINE__);试试看。
这两句就是定义了一个static char 数组THIS_FILE[],并把初值赋为当前源文件路径名而已。