関数でアクセスできるようにマクロをラップする必要があります。 マクロは次のように定義されています可変数の引数を持つマクロを折り返す
#define gDbgLog(fmt,...) dbgLog(g_pdbg,MODULE_NAME,__FUNCTION__,fmt,##__VA_ARGS__)
と私は同じようにそれを包むしようとしました:
void pMonDbgLog(char* fmt, ...)
{
va_list args;
va_start(args,fmt);
gDbgLog(fmt,args);
va_end(args);
}
fmt
は罰金を通ってくるように見える一方で、引数(int)がアップ上書きさ得るように見えます。私は好きそれを呼び出す:DbgLog("some text %d",x);
のように直接マクロを呼び出すと、正常に動作している間
int x = 51144;
pMonDbgLog("some text %d",x);
と私が取得するには、「いくつかのテキスト642129608」です。どうしてこれなの?
dbgLog()
出力を生成するためにvsnprintf()
をラップします。引数の数が可変で
マクロを直接呼び出すことができます(例: 'gDbgLog(some text%d"、x); ')。なぜ関数ラッパーが必要だと思いますか? – bgoldst