查看
宏展開有3種方法,只測過兩種,最後一種沒測試過
- 用GCC命令;
- 用VC內建的命令;
- Source Insight工具;
1,在GCC下,可以使用命令-E
如下面的代碼
#include <objbase.h>
#include <initguid.h>
#undef INTERFACE
#define INTERFACE IExample
DECLARE_INTERFACE_ (INTERFACE, IUnknown)
{
STDMETHOD (QueryInterface) (THIS_ REFIID, void **) PURE;
STDMETHOD_ (ULONG, AddRef) (THIS) PURE;
STDMETHOD_ (ULONG, Release) (THIS) PURE;
STDMETHOD (SetString) (THIS_ char *) PURE;
STDMETHOD (GetString) (THIS_ char *, DWORD) PURE;
};
代碼的作用先不用管,將它儲存為test.h或其它格式的檔案,命令列下輸入
gcc -E test.h >>E:/out.txt
開啟E盤的out.txt檔案,在該檔案的最下面可以看到如下的內容
typedef struct IExample { struct IExampleVtbl *lpVtbl; } IExample; typedef struct IExampleVtbl IExampleVtbl; struct IExampleVtbl
{
HRESULT(__attribute__((__stdcall__)) *QueryInterface) (IExample *, const IID* const, void **) ;
ULONG(__attribute__((__stdcall__)) *AddRef) (IExample *) ;
ULONG(__attribute__((__stdcall__)) *Release) (IExample *) ;
HRESULT(__attribute__((__stdcall__)) *SetString) (IExample *, char *) ;
HRESULT(__attribute__((__stdcall__)) *GetString) (IExample *, char *, DWORD) ;
};
__attribute__是gcc的關鍵字,用以描述變數屬性。
2,在VC下,也是可以,在Project->Setting->C/C++/最下面的Project Option的最後面添加/P命令
Rebuild All後,會提示一些錯誤,沒關係,在儲存該project的目錄下會有一個.i的檔案,開啟後
也可以在相應的位置找到跟out.txt相同的內容。
3,Source Insight 下也可以,不過沒測試過