2

私はこの質問を見ました:

マクロを使用してC++で確率変数名を生成するにはどうすればよいですか?

次の答えで:https ://stackoverflow.com/a/1675203/551045

そして、私はそれをclangに実装しようとしました。

私の申告書です:

#define TRACE(stream) FuncTrace x#__COUNTER__ (llvm::errs(), "hallo", 1)

すべてのバリエーションx##__COUNTER__; x ## __COUNTER__などを試しましたが、どれもうまくいかないようです。

これはclangのバグでしょうか?clangのヘルプページには、__COUNTER__マクロがあると書かれています。

最後に、マクロには次のようなものが必要です。

#define TRACE(stream) FuncTrace x#__COUNTER__ (stream, __FUNCTION__, __LINE__)
4

1 に答える 1

9
  1. 2 つのトークンを 1 つに連結するには、##演算子を使用します。#演算子は、トークンを文字列に変換するために使用されます。

  2. x ## __COUNTER__だけ生産しx__COUNTER__ます。最初に完全に展開する必要があります__COUNTER__。考えられる方法の 1 つは、さらにいくつかの間接化を追加することです。

    #define YTRACE(x, y) FuncTrace x##y (llvm::errs(), __FUNCTION__, __LINE__)
    #define XTRACE(x, y) YTRACE(x, y)
    #define TRACE(x) XTRACE(x, __COUNTER__)
    
于 2012-10-02T13:02:03.493 に答える