首页 > 解决方案 > 在另一个宏中使用字符串宏

问题描述

如何在 C 中的字符串宏中使用另一个宏?

我有这个:

#define MAX_OPERATION_COUNT 10
#define MSG_TOO_MANY_OPERATIONS "Too many operations! Only the first 10 were applied."

但我希望第二个宏使用第一个宏的值。例如,在 Java 中,我会有类似的东西:

public static final int MAX_OPERATION_COUNT = 10;
public static final String MSG_TOO_MANY_OPERATIONS = "Too many operations! Only the first " + MAX_OPERATION_COUNT + " were applied.";

有没有办法在 C 中做类似的事情?

编辑:这个问题的解决方案结果与这个问题 的解决方案非常相似,但我相信问题本身是完全不同的,应该分开处理。

标签: cstringmacros

解决方案


通常处理 printf 风格的格式会更容易,比如"Too many operations! Only the first %u were applied". 但是,如果您真的想进行字符串替换,则必须执行两次:

#define STR(x) STR2(x)
#define STR2(x) #x
#define MAX_OPERATION_COUNT 10
#define MSG_TOO_MANY_OPERATIONS "Too many operations! Only the first " STR(MAX_OPERATION_COUNT) " were applied."

推荐阅读