文字列化を理解する: マクロ拡張の重要な手順
C 系言語の文字列化の概念を使用すると、式を文字列に変換できます。このプロセスに含まれる手順を理解することは、マクロを効果的に使用するために非常に重要です。
問題: 出力の違い
次のマクロ定義を考えてみましょう:
#define foo 4 #define str(s) #s
コードで str(foo) を使用すると、文字列化 (ステップ 1) がテキストの前に実行されるため、「foo」が出力されます。展開 (ステップ 2)。
ただし、追加のマクロを定義すると:
#define xstr(s) str(s)
そして xstr(foo) を使用すると、驚くべきことに出力は "4" になります。この違いには、文字列化プロセスを調べる必要があります。
マクロ展開の手順
マクロ展開のプロセスには、C および C 標準に従って、いくつかの手順が含まれます。
xstr(foo) への手順の適用
str(foo) が "foo" を出力する理由
xstr(foo) とは対照的に、str(foo) は "foo" を出力します理由:
したがって、xstr のようなヘルパー マクロを使用すると、文字列化 (ステップ 1) の前にテキスト展開 (ステップ 2) が確実に実行され、正しい文字列化が可能になります。文字列変換。
以上がC 風のマクロ展開で `str(foo)` が 'foo' を出力するのに、`xstr(foo)` が '4' を出力するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。