【问题标题】:static conversion of integer constant to const char*整数常量到 const char* 的静态转换
【发布时间】:2026-02-22 19:10:01
【问题描述】:

我有一个在编译时已知的整数常量(但不是在代码编写时),我想在编译时生成一个const char*,将它们保存为 ASCII。例如

const int  C         = IntegerConst;
const char*C_as_text = StaticConvert(A);

这样,如果IntegerConst 在某些#included 头文件中给出,比如IntegerConst=42,而不是C_as_text="42"

知道如何获得这样的StaticConvert() 功能吗?原则上这必须是可能的,因为编译器和预处理器手头有所有必要的信息。

【问题讨论】:

  • 如果数字本身是一个常数表达式,是某种计算的结果(可能是sizeof(MyType)?),我们可以讨论一个模板解决方案......

标签: c++ c


【解决方案1】:

你可以使用预处理指令:

#define StaticConvert(N) #N

这里的条件是您需要将号码本身提供为N。例如

const int C = 42;
const char *C_as_test = StaticConvert(42);

【讨论】:

  • 好吧,这在我的情况下是行不通的,因为 C 不是文字。
【解决方案2】:

'stringize' 预处理器操作符:

#define StaticConverter(V) #V

const char *x = StaticConverter(56);
assert(x[0] == '5' && x[1] == '6' && x[2] == 0);

【讨论】:

    【解决方案3】:

    【讨论】: