簡體   English   中英

使用C預處理器將int連接到字符串

[英]Concatenate int to string using C Preprocessor

我試圖找出我怎么能連接一個#define “d INT到#define ”使用C預處理d字符串。 我的編譯器是CentOS 5上的GCC 4.1。該解決方案也適用於MinGW。

我想在字符串上附加一個版本號,但我能讓它工作的唯一方法是將版本號的副本定義為字符串。

我能找到的最接近的是引用宏參數的方法,但它對#define不起作用

這不起作用。

#define MAJOR_VER 2
#define MINOR_VER 6
#define MY_FILE "/home/user/.myapp" #MAJOR_VER #MINOR_VER

它不沒有工作#小號或者是因為值為數字,它會擴展到"/home/user/.myapp" 2 6 ,這是不合法的C。

這確實有效,但我不喜歡有版本定義的副本,因為我確實需要它們作為數字。

#define MAJOR_VER 2
#define MINOR_VER 6
#define MAJOR_VER_STR "2"
#define MINOR_VER_STR "6"
#define MY_FILE "/home/user/.myapp" MAJOR_VER_STRING MINOR_VER_STRING

經典C預處理器問題....

#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)

#define MAJOR_VER 2
#define MINOR_VER 6
#define MY_FILE "/home/user/.myapp" STR(MAJOR_VER) STR(MINOR_VER)

額外的間接級別將允許預處理器在將宏轉換為字符串之前擴展宏。

一種工作方式是將MY_FILE寫為參數宏:

#define MY_FILE(x,y) "/home..." #x #y

編輯:正如“Lindydancer”所述,此解決方案不會在參數中擴展宏。 更通用的解決方案是:

#define MY_FILE_(x,y) "/home..." #x #y
#define MY_FILE(x,y) MY_FILE_(x,y)

你可以用BOOST_PP_STRINGIZE做到這一點:

#define MAJOR_VER 2
#define MINOR_VER 6
#define MY_FILE "/home/user/.myapp" BOOST_PP_STRINGIZE(MAJOR_VER) BOOST_PP_STRINGIZE(MINOR_VER)

暫無
暫無

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

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