2

重複の可能性:
マクロ値の文字列化

「一連の文字」(たとえば、#define macro(sequence)) を受け取り、引用符で囲まれた文字列を返すC マクロを作成したい"sequence"ので、マクロは を作成する必要があります"\"sequence\""。私はできることを知っていますが、これは私が探しているものではないものを#sequence返すだけです...それは別のマクロであると言わなければなりません. . 何か案は?"sequence""sequence"

4

3 に答える 3

3
#include <stdio.h>

#define QUOTE(seq) "\""#seq"\""

int main(void)
{
    printf("%s\n", QUOTE(sequence));
    return 0;
}
于 2012-12-06T10:11:54.257 に答える
2

#sequence前後に引用符を追加して使用します。

#define macro(sequence) "\"" #sequence "\""

文字列リテラルが連結され、必要な結果が得られます。

例えば:

#define hello abc
printf("%s\n", macro(hello));

印刷します"hello"(引用符を含む)。

于 2012-12-06T09:59:18.020 に答える
1

引数を展開するマクロと、引用符を追加するマクロが必要です。後者のマクロを 2 回呼び出して、引用符を引用符で囲みます。このような場合、エスケープは自動的に処理されます。

#define stringify_literal( x ) # x
#define stringify_expanded( x ) stringify_literal( x )
#define stringify_with_quotes( x ) stringify_expanded( stringify_expanded( x ) )
于 2012-12-06T10:07:42.880 に答える