簡體   English   中英

使用前導零進行字符串化

[英]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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM