ANSI C では、-xtransition オプションを使用するとき、次の例 (キ印) を使用すると、古い機能を使用しているという警告が生成されます。移行モード (-Xt と -Xs) の場合のみ、結果は以前のバージョンの C と同じになります。
K&R C では、次のコードは文字列リテラル「x y!」を生成しました。
#define str(a) "a!"キ str(x y)
したがって、プリプロセッサは、文字列リテラルと文字定数の内部で、マクロパラメータのように見える文字を検索していました。ANSI C はこの機能の重要性を認識していましたが、トークンの部分にこの操作を行うことはできませんでした。ANSI C では、上記マクロは文字列リテラル「a!」を生成します。ANSI C で以前の効果を得るためには、# マクロ置換演算子と文字列リテラルの連結を使用してください。
#define str(a) #a "!" str(x y)
上記コードは、2 つの文字列リテラル「x y」と「!」を生成し、連結した後、同じ「x y!」を生成します。
文字定数用の操作を完全に代用するものはありません。この機能の主な使用方法は次のようなものでした。
#define CNTL(ch) (037 & 'ch') キ CNTL(L)
(037 & 'L')
これは、ASCII の Control-L 文字と同じです。最良の解決策は、このマクロを次のように変更することです。
#define CNTL(ch) (037 & (ch)) CNTL('L')
このコードの方が読みやすく、式にも適用できるため、より使いやすくなっています。