用前导零字符串化
Stringifying with leading zeros
我正在寻找一种在编译时在 C++ 中使用固定长度的设备名称作为字符串文字的方法。
例如:
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)
#define VERSION 6
#define DEVICE_NAME "MyDevice" STR(VERSION)
我想要的输出是带有前导零以适应 4 位数字的固定长度,就像 "MyDevice0006"
一样,使用之前代码的实际输出是 "MyDevice6"
。
我搜索并找到了这个 :
#undef VER
#define VER ...your version number...
#undef SMARTVER_HELPER_
#undef RESVER
#if VER < 10
#define SMARTVER_HELPER_(x) 000 ## x
#elif VER < 100
#define SMARTVER_HELPER_(x) 00 ## x
#elif VER < 1000
#define SMARTVER_HELPER_(x) 0 ## x
#else
#define SMARTVER_HELPER_(x) x
#endif
#define RESVER(x) SMARTVER_HELPER_(x)
但是尝试它给了我错误:
error: expected ‘;’ before numeric constant
#define SMARTVER_HELPER_(x) 00 ## x
^
是否有增强代码来执行此操作?
非常难看,但这应该可以解决问题:
#include <stdio.h>
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)
#define VERSION 6
#if (version < 10)
#define DEVICE_NAME "MyDevice000" STR(VERSION)
#elif (version < 100)
#define DEVICE_NAME "MyDevice00" STR(VERSION)
#elif (version < 1000)
#define DEVICE_NAME "MyDevice0" STR(VERSION)
#else
#define DEVICE_NAME "MyDevice" STR(VERSION)
#endif
int main(void)
{
puts(DEVICE_NAME);
}
我正在寻找一种在编译时在 C++ 中使用固定长度的设备名称作为字符串文字的方法。
例如:
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)
#define VERSION 6
#define DEVICE_NAME "MyDevice" STR(VERSION)
我想要的输出是带有前导零以适应 4 位数字的固定长度,就像 "MyDevice0006"
一样,使用之前代码的实际输出是 "MyDevice6"
。
我搜索并找到了这个
#undef VER
#define VER ...your version number...
#undef SMARTVER_HELPER_
#undef RESVER
#if VER < 10
#define SMARTVER_HELPER_(x) 000 ## x
#elif VER < 100
#define SMARTVER_HELPER_(x) 00 ## x
#elif VER < 1000
#define SMARTVER_HELPER_(x) 0 ## x
#else
#define SMARTVER_HELPER_(x) x
#endif
#define RESVER(x) SMARTVER_HELPER_(x)
但是尝试它给了我错误:
error: expected ‘;’ before numeric constant
#define SMARTVER_HELPER_(x) 00 ## x
^
是否有增强代码来执行此操作?
非常难看,但这应该可以解决问题:
#include <stdio.h>
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)
#define VERSION 6
#if (version < 10)
#define DEVICE_NAME "MyDevice000" STR(VERSION)
#elif (version < 100)
#define DEVICE_NAME "MyDevice00" STR(VERSION)
#elif (version < 1000)
#define DEVICE_NAME "MyDevice0" STR(VERSION)
#else
#define DEVICE_NAME "MyDevice" STR(VERSION)
#endif
int main(void)
{
puts(DEVICE_NAME);
}