文字列リテラルを使用してマクロを定義する場合、多くの場合、それらを連結して新しい文字列を形成する必要があります。例を考えてみましょう:
#define STR1 "s" #define STR2 "1" #define STR3 STR1 ## STR2
疑問が生じます:単一のマクロ定義を使用して STR1 と STR2 を直接連結して "s1" を取得することは可能ですか?
伝統的に、マクロ内の文字列の連結は文字列化演算子 (#) を利用して実現されます。ただし、この方法では中間マクロ関数に引数を渡す必要があります。
#define CONCAT(x, y) x ## y #define STR3 CONCAT(STR1, STR2)
文字列リテラルを連結する特定のケースについては、簡略化されたアプローチが存在します。文字列化演算子を省略すると、文字列を直接連結できます:
#define STR3 STR1 STR2
これは次のように展開されます:
#define STR3 "s" "1"
C 言語では、文字列をスペースと並べて (「s」のように) "1") は、単一の文字列 "s1" を持つことと同等です。したがって、この簡素化された方法は、C/C マクロで文字列リテラルを連結する直接的な方法を提供します。
以上がC/C マクロで文字列リテラルを直接連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。