0

いくつかのログレベルでログメカニズムを作成しました。

LOG_FATAL(s)
LOG_ERROR(s)
LOG_WARN(s)
...

ここで、いくつかのモジュールのロギングをアクティブ化または非アクティブ化できるようにしたいと思います。私が今していること:

#ifdef MOUDLE_LOG_ON
  MODULE_LOG_FATAL(s)  LOG_FATAL(s) 
  MODULE_LOG_ERROR(s)  LOG_ERROR(s)
  MODULE_LOG_WARN(s)   LOG_WARN(s)
  ...
#else
  MODULE_LOG_FATAL(s) 
  MODULE_LOG_ERROR(s)
  MODULE_LOG_WARN(s)
  ...
#endif

次のように使用するために、マクロにプレフィックスを配置する方法はありますか?

SETUPLOGGING(MODULE) 
4

3 に答える 3

2

マクロは新しいマクロを定義できません。また、マクロを定義する場合、他のマクロからその名前を作成することはできないため、必要なものを定義するファイルを含めるという一般的な回避策を使用することはできません。

于 2012-08-23T14:20:26.073 に答える
2

マクロとインライン関数を使用することで問題を解決できるかどうか疑問に思っています。

void inline LOG_FATAL(const char *s)
{
    printf("%s\n", s);
}

#define SETUPLOGGING(x) \
    void inline x ## _LOG_FATAL(const char *s) { LOG_FATAL(s); }

SETUPLOGGING(MODULE)

int main()
{
    MODULE_LOG_FATAL("hello");
}

前処理後、これにより以下が生成されます。

void inline LOG_FATAL(const char *s)
{
 printf("%s\n", s);
}

void inline MODULE_LOG_FATAL(const char *s) { LOG_FATAL(s); }

int main()
{
 MODULE_LOG_FATAL("hello");
}
于 2012-08-23T14:28:17.477 に答える
0

マクロを使用して、使用するインクルードファイルを定義できますが、インクルードファイルを使用して、そこでマクロを使用してみませんか?

于 2012-08-23T14:29:58.837 に答える