0

重複の可能性:
C プリプロセッサと連結
C プリプロセッサ # および ## 演算子

(組み込みプロジェクトで) 開発した OS の C コードを検索しているときに、次の define ステートメントを見つけました。

#define concatn(s1, s2) s1 ## s2

「##」演算子を見たことがなく、少し真剣にグーグルで調べた後、それへの参照が見つかりません。何が起きてる?

OS ソースを検索しましたが、別の形式の C 演算子として定義されている文字列 "##" への参照が見つかりません。これは標準の C ですか、それともおそらくコンパイラの機能ですか?

4

4 に答える 4

4

##Cのトークン貼り付け演算子です。2 つのトークンを連結するために使用されます。

例:

#define PASTE(front, back) front ## back

それから

PASTE(name, 1)    

トークンを作成しますname1

于 2012-10-09T19:55:32.043 に答える
4

これは、トークンの連結であるプリプロセッサの一部であり、concatn(x,y)に置き換えられxyます。

于 2012-10-09T19:51:38.483 に答える
3

これは、標準の C プリプロセッサ文字列連結演算子です。

于 2012-10-09T19:51:47.137 に答える
2

2 つのトークン (この場合は s1 と s2) を連結するために使用されます。詳細はこちら。これは標準 C の前処理であるため、標準に準拠したすべてのコンパイラで処理する必要があります。

例えば:

concatn(a_, b) = 1;

マクロは次のようになります。

a_b = 1;
于 2012-10-09T19:51:47.347 に答える