簡體   English   中英

在循環中串聯c中的宏

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

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