0

私のコードでは、1 つのタイプのデバッグ ステートメントを複数回使用しDEBUG("abcd");DEBUG("abc %d def", val)います。

ただし、これらすべてを、次のような宣言を含む関数を使用する必要がある別のタイプのログに変換したいと考えています。

WRITE(char *string);

使い方:WRITE(L"abcd")etc. このdebug文の使い方は膨大なので、マクロを使って変換したいと考えています。これはできますか?また、DEBUG関数がフォーマット指定子も取り込んでいたことを考えると?

4

2 に答える 2

0

あなたはおそらくgnu関数のようなものが欲しい

int asprintf(char **strp, const char *fmt, ...);

*strpこれは、印刷された文字列を保持する十分に大きなサイズの割り当てられた文字列を返す関数です。WRITEおよびDEBUGマクロが、式の内部ではなく、ステートメントとして使用される場所でのみ使用されると仮定すると、次のことができます。

#define DEBUG(...)              \
do {                            \
  char* strp = 0;               \
  asprintf(&strp, __VA_ARG__);  \
  WRITE(strp);                  \
  free(strp);                   \
} while(0)

プラットフォームに がない場合は、必要に応じて返される文字列を使用および拡大するasprintf実装を考え出すことができます。snprintf

于 2013-12-01T09:51:56.670 に答える
0

多分あなたは見ている:#define DEBUG(str,...) WRITE(str,__VA_ARGS__)

于 2013-12-01T09:36:03.640 に答える