文字列化の魔法を明らかにする
プログラミングの分野では、文字列化は、マクロが彼らの主張。このプロセスがどのように展開するかを理解するための鍵は、マクロ展開が発生する細心の注意を払った順序です。
次のマクロ定義を考えてみましょう。
#define foo 4 #define str(s) #s
str(foo) が評価されると、次の結果が得られます。 stringify 操作 (#) がテキスト展開よりも優先されるため、#s を "foo" に展開します。ただし、追加のマクロ間接指定層を導入する場合、操作の順序が重要になります。
xstr(foo) の場合
マクロ xstr(s) を定義します。 as:
#define xstr(s) str(s) #define str(s) #s #define foo 4
このマクロを xstr(foo) に適用すると、予期しない結果「4」が生成されます。この謎を解明する鍵は、マクロ展開の次の手順にあります。
xstr(foo) が処理されるとき: xstr(s) 内の
#4 は文字列リテラルであるため、「4」に解決されます。したがって、文字列化操作はテキスト展開後に有効になるため、xstr(foo) は「foo」ではなく「4」と評価されます。
マクロ順序のレッスン
これ一見直感に反する結果は、マクロな秩序の重要性を強調しています。このようなあいまいさを避けるために、ヘルパー マクロを使用して stringify 操作を適用する前に 1 つのステップを実行することが推奨されることがよくあります。これにより、操作の順序が明確に定義され、望ましい結果が保証されます。
以上がマクロの展開順序は C の前処理における文字列化にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。