1

我有一个需要连接字符串的代码,如下所示:

#define CMD(A,B)  CMD_##A_PROMPT##B

void main()
{
    int a = 10, b = 5;
    printf("%s\n", CMD(a, b));
}

期望的输出是:CMD10_PROMPT5
这可以通过任何方式实现吗?

4

2 回答 2

3

我不认为这是可以做到的,因为您要查找的宏是编译时“字符串化”,参数在运行时接收它们的值。

如果您正在寻找运行时“字符串化”,请使用sprintf等。

于 2012-06-07T08:39:49.350 回答
1

您可以通过替换来做到这一点int a = 10, b = 5;

#define a 10
#define b 5

否则是不可能的。C 翻译发生在标准中定义的一系列阶段,预处理阶段发生在任何对象定义被解析之前。就预处理器而言,int a = 10不会在 tokena和 token之间建立任何关系10

如果您所追求的只是输出,请这样做:

#define CMD_PATTERN "CMD_%d_PROMPT%d"

int main() {
    int a = 10, b = 5;
    printf(CMD_PATTERN "\n", a, b);
}

不幸的是,参数的提供顺序与它们在模式中出现的顺序相同——这使得将来很难更改顺序。出于这个原因,定义格式化函数可能比仅仅定义一个模式更好。

于 2012-06-07T08:46:13.927 回答