3

C99標準とこれを理解するのに問題があります:

c99 - 6.10.3.3  
Semantics 
3

---(2文目)

Placemarker preprocessing tokens特別に処理されます。2つのプレースマーカーを連結すると単一のプレースマーカー前処理トークンになり、プレースマーカーを連結するとnon-placemarker preprocessing token非プレースマーカー前処理トークンになります。

結果が有効な前処理トークンでない場合、動作は未定義です。

1.What does this `placemarker` and `non-placemarker` term mean exactly?
2.Why the last line says : `undefined behaviour` ?

私は10回以上読んだことがありますが、それでもこれらの技術名については戸惑っています。

例と少しの説明でどんな助けでも私をもっと助けます。

4

1 に答える 1

4

Placemarker トークンは、前の段落 (6.10.3.2) で定義されています。

関数のようなマクロの置換リストで、パラメータの直前または直後に##前処理トークンがある場合、そのパラメータは対応する引数の前処理トークン シーケンスに置き換えられます。ただし、引数が前処理トークンで構成されていない場合、パラメーターは代わりにプレースマーカー前処理トークンに置き換えられます。145)

そして脚注:

145) Placemarker 前処理トークンは、変換フェーズ 4 内にのみ存在する一時的なエンティティであるため、構文には表示されません。

そして、あなたが引用した最後の行は「未定義の動作」とは言っておらず、「動作は未定義です」と言っています。ここであなたがどのような答えを求めているのかわかりません。標準の作成者がそのように決定したため、そう言っています。

于 2012-11-26T12:25:43.370 に答える