[英]concatenate macros in c in a loop
我想連接很多宏,以便將它們作為參數傳遞給被擊中的數組。 更具體地說,我有這個結構
static struct
{
unsigned int num_irqs;
volatile __int_handler *_int_line_handler_table;
}_int_handler_table[INTR_GROUPS];
我想將一系列宏作為num_irqs
參數傳遞
AVR32_INTC_NUM_IRQS_PER_GRP1
AVR32_INTC_NUM_IRQS_PER_GRP2
...
首先我想使用此代碼
for (int i=0;i<INTR_GROUPS;i++)
{
_int_handler_table[i].num_irqs = TPASTE2(AVR32_INTC_NUM_IRQS_PER_GRP,i);
}
但每次都將i
當作char
而不是特定值。 我還看到在preprocessor.h中定義了一個MREPEAT
宏,但是我不理解如何從示例中使用它。
任何人都可以解釋使用MREPEAT
或進行上述操作的其他方式。
C不能那樣工作。
宏只是在編譯時發生的文本替換。 您無法編寫代碼來構造宏名稱,這沒有任何意義。 運行代碼時,編譯器不再存在。
除非代碼量很大(在這種情況下,代碼生成是一種常見的解決方案),否則您可能應該只手動執行此操作。
請記住,預處理器(用於處理宏) 在編譯器之前運行。 這意味着要操縱最終的源代碼以提交給編譯器。
因此,它不知道什么值具有變量。 對於預處理器, i
表示i
。
您嘗試執行的操作有些復雜,尤其要記住預處理器無法生成預處理器指令。
但是它可以生成常量。 說到這,對於您的用例,我更喜歡使用常量表,例如:
const int AVR32_INTC_NUM_IRQS_PER_GRP[] = { 1, 2, 3, 4, 5 };
for (int i=0;i<INTR_GROUPS;i++)
{
_int_handler_table[i].num_irqs = TPASTE2(AVR32_INTC_NUM_IRQS_PER_GRP[i]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.