【问题标题】:String macro expansion with arguments. C [duplicate]带参数的字符串宏扩展。 C [重复]
【发布时间】:2017-09-29 10:12:42
【问题描述】:

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

我的代码是这样的:

#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,我需要将宏扩展为字符串。

提前致谢。

【问题讨论】:

    标签: c string macros


    【解决方案1】:

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

    x 是一个变量,而 x+1 是一个运行时构造。没有宏会将运行时编号转换为静态字符串。

    【讨论】:

    • 有什么办法可以用内联函数替换那个宏?
    • 我不会费心写一个内联函数。因为正常的功能就可以了。如果您不更改调用模式,则该函数可能存在可重入问题。
    猜你喜欢
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    相关资源
    最近更新 更多