我如果定义这样一个宏:
#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分,只好另开贴了。
#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分,只好另开贴了。
在C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin下有一个文件:
MACROCPP.DAT
里边收录了宏名称的宏都会自动展开,但修改这个文件却无效,
哪位知道怎么样使修改有效?
谢谢你,可是我试过了,自定义宏放在一个公共头文件里,不管有没有连行符号,
都是不会自动展开的,放在当前文件里,不管有没有连行符号,都会自动展开。
请继续尝试,我也在努力。
你在workspase 的Test()类的成员项里,看到有一个成员DEBUG_FUNCTION()了吧?
VC把它当成函数了(编绎时当然会展开,而我要的是立即展开,要不然就无法实现代
码的自动完成和成员列表显示)。
你在Test类的DEBUG_FUNCTION()下加一行DECLARE_SERIAL(CTest)试试看,
VC不会把这一行当作一个函数的。
TO smartukyo(橘右京) :你说的是有效,这跟立即展开是不同的。