c - 如何使用宏将宏字符串化?

标签 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}

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

最佳答案

您需要再添加一层间接寻址以扩展宏(并且由于它包含逗号,您必须使用可变参数):

#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]

关于c - 如何使用宏将宏字符串化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48942903/

相关文章:

使用 MACRO 将 sprintf 转换为 snprintf

c++ - 将 LARGE_INTEGER.QuadPart 作为 size_t 的输出参数传递是否安全?

c - 是否有必要在 C 预处理器中检查宏的定义?

c - 在未定义之前保存扩展的宏结果

c 链式困惑

c++ - 如何使用两个指针查找链表中是否存在循环?

检查定义 GNU C

C++定义可变宏

c - 使用 __VA_ARGS__ 定义字符串化宏时出错

c - 打印预处理器形成的变量标识符