c - 带参数的字符串宏扩展。 C

标签 c string macros

<分区>

这个问题快把我逼疯了。出于元编程的原因,我需要将可变参数宏扩展为字符串。

我的代码是这样的:

#define macro(A, B) "Lorem "#A" ipsum "#B

void main () {
    printf (macro(1, 2));
}

所以这将打印出:Lorem 1 ipsum 2。

问题是我需要将一个变量与一个整数相加,所以我尝试了以下操作:

#define macro(A, B) "Lorem "#A" ipsum "#B

void main () {
    int x = 1;
    printf (macro(x+1, 2));
}

和:

#define macro(A, C, B) "Lorem "#(A+C)" ipsum "#B

void main () {
    int x = 1;
    printf (macro(1, x, 2));
}

但是这些对我都不起作用,难道不可能吗?或者也许有办法做到这一点。

我不能只使用带有参数的 printf,我需要的是将宏扩展为字符串。

提前致谢。

最佳答案

如果你想得到“Lorem 2 ipsum 2”那么这是不可能的,至少如果不改变你的设计。

x 是一个变量,x+1 是一个运行时结构。没有宏会将运行时编号生成为静态字符串。

关于c - 带参数的字符串宏扩展。 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46486664/

相关文章:

c - 将字符指针转换为交换函数的 void 指针的问题

python - 如何评估字符串输入并检查它是否为小数

Java - 为什么我不能使用 charAt() 来查看一个字符是否等于另一个字符?

java - 如何从Java项目中的所有Java文件中提取所有字符串?

c - 如果 if 语句重复为真直到为假,则只增加计数器 (++) 一次?

c - 1,2,1,3,2,5,3,7,5,11,8,13,13,17... 打印第 N 项

c - 为什么C程序的输出是错误的?我查了好久

rust - 是否使用rust 格式!宏提供用户指定的填充字符

macros - 有没有办法从文档中隐藏宏模式?

macros - Clojure 宏到文件中的 "insert"代码