[英]use of ## and # operator to concatenate the strings in a macro in C
我有一個代碼,需要連接字符串,如下所示:
#define CMD(A,B) CMD_##A_PROMPT##B
void main()
{
int a = 10, b = 5;
printf("%s\n", CMD(a, b));
}
所需的輸出是: CMD10_PROMPT5
這可以通過任何方式實現嗎?
我不認為這可以做到,因為您正在尋找的宏是編譯時 “字符串化”,參數在運行時接收它們的值。
如果您正在尋找運行時“字符串化”,請使用sprintf
等。
你可以通過替換int a = 10, b = 5;
有:
#define a 10
#define b 5
否則就不可能。 C轉換發生在標准中定義的一系列階段中,預處理階段發生在解析任何對象定義之前。 就預處理器而言, int a = 10
不會在令牌a
和令牌10
之間建立任何關系。
如果你只是輸出,那就這樣做:
#define CMD_PATTERN "CMD_%d_PROMPT%d"
int main() {
int a = 10, b = 5;
printf(CMD_PATTERN "\n", a, b);
}
不幸的是要求參數以與它們出現在模式中相同的順序提供 - 這使得將來很難改變順序。 因此,定義格式化函數而不僅僅是模式可能更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.