#include <stdio.h>
#define X 2
#define N_1_T 50
#define N_2_T 49
#define PRINT() printf("id: %d", N_ ## X ## _T)
int main(void)
{
PRINT();
return 0;
}
我想N_ ## X ## _T擴展到N_2_T當我有 Macro #define X 2。如果我將 X 的宏定義更改為#define X 1,N_ ## X ## _T應擴展為N_1_T.
但我不知道該怎么做。我已經搜索并閱讀了很多頁面,但我只是沒有得到我應該做的事情來達到預期的結果。
請幫忙,謝謝。
uj5u.com熱心網友回復:
為了實作您想要的,X宏必須在連接之前擴展為前處理器標記2,因此包含 的宏##必須傳遞一個擴展的2. 它與此非常相似:Stringification - 它是如何作業的?
您可以使用一些強制重新掃描 pp 令牌的輔助宏來解決此問題:
#include <stdio.h>
#define X 2
#define N_1_T 50
#define N_2_T 49
#define CONCAT(n) N_ ## n ## _T
#define GET_ID(n) CONCAT(n)
#define PRINT() printf("id: %d", GET_ID(X))
int main(void)
{
PRINT();
return 0;
}
輸出:
id: 49
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/417149.html
標籤:
上一篇:如何在C中正確讀/寫塊設備?
下一篇:宏中看似毫無意義的操作
