如何使用宏对宏进行字符串化?

时间:2018-02-23 07:11:52

标签: c c-preprocessor stringification

#define A_1 {2,1124,124110,2,0,20,5121,0,21241,10}
#define SFY(macro) #macro

void func(char* s, int i) {
    printf("%d %s", i, s);
}

int main (void) {
    int a[10] = A_1;
    func(SFY(A_1), 2);
}

我想要的输出是:

2 {2,1124,124110,2,0,20,5121,0,21241,10}

如何将这样的宏字符串化?

1 个答案:

答案 0 :(得分:4)

您需要再添加一个间接层以扩展宏(因为它包含逗号,您必须使用可变参数):

#define A_1 {2,1124,124110,2,0,20,5121,0,21241,10}
#define SFY_2(...) #__VA_ARGS__
#define SFY(macro) SFY_2(macro)

void func(char* s, int i) {
    printf("%d %s", i, s);
}

int main (void) {
    int a[10] = A_1;
    func(SFY(A_1), 2);
}

[Live example]