簡體   English   中英

使用##和#運算符在C中連接宏中的字符串

[英]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.

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