0

#defineマクロが次のように作成された記事を読んでいました:

#define TEST(level) if (level > 2) ; else std::cout

これは、次のようなコードで使用できます。

Test(1) << 3;
Test(3) << 4;

あなたが書いたら

TEST(1)

それは次のように置き換えられます:

std::cout

TEST(3)

(コードファイル内の)空の文字列に置き換えられます。ただし、このように機能した場合は、エラーがスローされるはずです。

<< 3;

無効です。

このマクロは実際にどのように機能しますか?プリプロセッサはどのように変化しますか

TEST(3) << 3;

何も出力しないようにします(つまり、コードは実行されません)

4

2 に答える 2

5

私はあなたがそれを間違えたと信じています:

の場合TEST(3) << 3、置き換えられるフォームは次のとおりです。

if (3 > 2) ; else std::cout << 3

それはまだ有効な式です

于 2012-11-15T04:18:41.027 に答える
1

に置き換えTEST(x)られます。

 if (x > 2)
    // do nothing
 else
    std::cout << x

プリプロセッサがすべてのテキストを置き換えます。つまり、if-else全体を取得します。

これは次のように書くこともできます

#define TEST(x) if (!x > 2) std::cout
于 2012-11-15T04:19:20.210 に答える