我如果定义这样一个宏:  
#define  DEBUG_FUNCTION()  \  
       virtual  void  AssertValid()  const;  \  
       virtual  void  Dump(CDumpContext&  dc)  const;  
 
并且把它放到一个公共的头文件比如stdafx.h里,  
使用的时候在工作区的类成员树上就会看到有一个DEBUG_FUNCTION()  函数,  
也就是说VC把这个宏当成一个函数了,没有展开,编译时才展开,  
编译是没有错的。 
如果我把上边的宏定义在当前的头文件里,就会立即展开了,可是,这样就要
每一个头文件都拷一份了。 
可是如果使用一个DECLARE_SERIAL(CMyClass)  这样的内部宏就不会这样,  
会立即展开,不会把它当成一个函数声明。我看了afx.h里的这些宏的定义,  
也没什么特别的,不知道VC在什么地方预先处理了。我想可能有个文件,  
把一些特定的宏作了处理,也不知道是不是,哪位知道是怎么回事?300分相  
赠。我只够格给100分,只好另开贴了。

解决方案 »

  1.   

    有进展:
    在C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin下有一个文件:
    MACROCPP.DAT
    里边收录了宏名称的宏都会自动展开,但修改这个文件却无效,
    哪位知道怎么样使修改有效?
      

  2.   

    To BinaryPoet(二进制诗人) :
    谢谢你,可是我试过了,自定义宏放在一个公共头文件里,不管有没有连行符号,
    都是不会自动展开的,放在当前文件里,不管有没有连行符号,都会自动展开。
    请继续尝试,我也在努力。
      

  3.   

    可是我的工程是可以的,要不要Mail一个给你?
      

  4.   

    很简单: 指它放在StdAfx.h中定义,这个家伙将被任何一个其它.cpp文件所包含.
      

  5.   

    MFC的宏看上去是"自动"的,其他它所在的文件已在 stdafx.h中被包含了.不信,你若在stdafx.h中把那个文件删了,肯定就变为"不自动"了.
      

  6.   

    谢谢BinaryPoet(二进制诗人) ,但是不行啊,
    你在workspase 的Test()类的成员项里,看到有一个成员DEBUG_FUNCTION()了吧?
    VC把它当成函数了(编绎时当然会展开,而我要的是立即展开,要不然就无法实现代
    码的自动完成和成员列表显示)。
    你在Test类的DEBUG_FUNCTION()下加一行DECLARE_SERIAL(CTest)试试看,
    VC不会把这一行当作一个函数的。
    TO smartukyo(橘右京) :你说的是有效,这跟立即展开是不同的。