8

学習とデモンストレーションには、パラメーターを出力して評価するマクロが必要です。これは非常に一般的なケースであり、FAQでさえあるかもしれませんが、実際の参照は見つかりません。

私の現在のコードは次のとおりです。

#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", __STRING(expr), (expr)))

その後:

PRINT(x & 0x01);

正常に動作しますが、特にプライベート__名前空間にあるため、__STRINGマクロの有効なステータスがわかりません。

だから、私の質問:

  1. このマクロを書くためのより良い方法はありますか?
  2. __STRINGは標準/大/悪ですか?
  3. 既存の検索ツールを使用して__STRINGについて検索するにはどうすればよいですか?SOの検索エンジンは、文字列を含むものを検索するだけです:-(
4

3 に答える 3

13

何かのようなもの

#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", #expr, (expr)))

おそらくあなたが望むものです。# は文字列化演算子です。

于 2008-12-18T10:20:16.457 に答える
11

# プリプロセッサ トークンを使用して、それに続くパラメータを文字列リテラルに変換できます。

#include <stdlib.h>
#include <stdio.h>

#define STR(x) #x
#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", STR(expr), (expr)))

int main(void)
{
    int x = 7;

    PRINT(x & 0x01);

    return EXIT_SUCCESS;
}
  1. それは間違いなく標準ではありません。私がこれに出くわしたのはこれが初めてです。一見すると、上記の STR() マクロよりも多くのことを行うようには見えないため、驚くことではありません。

  2. Googleは正常に動作しているようです。

于 2008-12-18T10:15:54.827 に答える