重複の可能性:
マクロ値の文字列化
「一連の文字」(たとえば、#define macro(sequence)
) を受け取り、引用符で囲まれた文字列を返すC マクロを作成したい"sequence"
ので、マクロは を作成する必要があります"\"sequence\""
。私はできることを知っていますが、これは私が探しているものではないものを#sequence
返すだけです...それは別のマクロであると言わなければなりません. . 何か案は?"sequence"
"sequence"
#include <stdio.h>
#define QUOTE(seq) "\""#seq"\""
int main(void)
{
printf("%s\n", QUOTE(sequence));
return 0;
}
#sequence
前後に引用符を追加して使用します。
#define macro(sequence) "\"" #sequence "\""
文字列リテラルが連結され、必要な結果が得られます。
例えば:
#define hello abc
printf("%s\n", macro(hello));
印刷します"hello"
(引用符を含む)。
引数を展開するマクロと、引用符を追加するマクロが必要です。後者のマクロを 2 回呼び出して、引用符を引用符で囲みます。このような場合、エスケープは自動的に処理されます。
#define stringify_literal( x ) # x
#define stringify_expanded( x ) stringify_literal( x )
#define stringify_with_quotes( x ) stringify_expanded( stringify_expanded( x ) )