在每个头文件的开头有这些东西,它们代表什么意思,能否删除。
#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.   

    #ifdef 标识符
    检查标识符当前是否预定义过。 
    #else
    else_语句序列;
    #endif 
    当前表达式为假时, else_语句序列将被编译。 
    #undef 标识符
    如果标识符以前定义过, 那么 
    #undef 
    后, 标识符就被编译器认为是未定义的了
      

  2.   

    供编译器使用,当你通过AppWizard生成应用程序的时候,这些代码都自动生成。
      

  3.   

    这些我都知道,我是问AFX_MAINDLG_H__7FFD2FC7_8C06_11D6_B7CA_0050BA40CCBD__INCLUDED
    这样的东西究竟是代表什么意思,回答问题要有的放矢,别答得我我不好意思看。
      

  4.   

    AFX_MAINDLG_H__7FFD2FC7_8C06_11D6_B7CA_0050BA40CCBD__INCLUDED
    这样的东西好像没什么意义,只是个表示或版本序列,
    7FFD2FC7_8C06_11D6_B7CA_0050BA40CCBD 我觉得Microsoft肯定有它的用意
    不过这样:
    // file
    #ifndef  _MY_FILE_2002_7_30_15_TALK_H
        #define _MY_FILE_2002_7_30_15_TALK_H#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
    ............ // code here
    #endif好像也行
      

  5.   

    这个不过是你的文件名maindlg.h+一个GUID组成的相对唯一的符号而已,
    你也可能把它改成:
    #ifndef tmd_afx
    #ifndef tnnd_afx

    只要保证其他文件中别出现这个符号就行了.
      

  6.   

    楼上的大哥。
    那不过是个GUID嘛,鬼才知道下个是什么。
    你运行guidgen试试,给你随机产生一大堆。
      

  7.   

    CSDN的速度真是太慢了,太不如以前了。唉。
      

  8.   

    to dusj:它即然是一个GUID,你能删除吗?TO NACK:
     它是一个版本或序号你能将它改成别的数字吗,还有static char THIS_FILE[] = __FILE__;它是什么意思。难道高手们编程序只知道写,不知道它的具体意思也不管的吗?MICROSOFT在这里肯定有它的用意的难道没有一个人知道吗?
      

  9.   

    我来解释吧:
    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[],并把初值赋为当前源文件路径名而已。
      

  10.   

    我来解释吧:
    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[],并把初值赋为当前源文件路径名而已。