2015-06-27 60 views
0

我有三個列表之一與整數變量(ilist),一個雙變量(dlist)和一個與std ::字符串變量(slist)與具體的初始值。 示例: 的IList =(ilist1 = init_val_1)(ilist2 = init_val_2)預處理器:如何使用列表定義變量和函數輸入

是否有可能爲預處理器以生成代碼,如:

int ilist1=init_val_1; 
int ilist2=init_val_2; 
... 
int ilistn=init_val_n; 

double dlist1=dnit_val_1; 
double dlist2=dnit_val_2; 

f(ilist1, ilist2, ilist3, ..., ilistn, dlist1, dlist2); 

我可以使用升壓(升壓::預處理)在該項目。

+2

爲什麼你不使用數組呢?我的意思是,通過預處理器一起黑客攻擊? –

+0

是的,只要n足夠小(我認爲是256)就很有可能。 – chris

回答

0

當我剛剛開始編程時,我一直在尋找方法來快速安全地定義大量類似的變量。現在,我意識到,幾乎總是最好使用一個數組std::arraystd::vector來代替 - 它更容易理解並易於使用,即使前處理器存在一些令人討厭的黑客方法。

FWIW,這立即竄出來記:

#define I(x) int ilist##x=init_val_##x 
I(1); 
I(2); 
//[...] 

#undef I //to avoid accidentally using it later in the code 
#define D(x) double dlist##x=dnit_val_##x; 
D(1); 
D(2); 
#undef D 

功能需要大量像這樣的變量幾乎肯定需要一個數組,std::arraystd::vector或兩個真的。

+0

宏中的代碼着色有點誤導 - 該行的其餘部分未被註釋掉! –

+0

hdijohkem,這對你有幫助嗎?我會收到評論/ upvote /接受的答案嗎? –

+0

感謝這有助於很多。 :d – hdijohkem