2015-10-15 164 views
1

我有以下形式的功能:定義一個宏的函數定義

void onPulse10(){ 
    pulseList.push_back(10); 
} 

void setupMeterInput10(){ 
    pinMode(10, INPUT_PULLUP); 
    attachInterrupt(digitalPinToInterrupt(10), onPulse10, RISING); 
} 

我使用這些附加的引腳中斷。我的問題是我有大約十個引腳,我希望使用中斷來觀察。所有做同樣的事情唯一的區別是數字:而不是10將是10-20。我怎樣才能定義一個宏,如SetupPin10()將擴大到上述,所以我可以有10個安裝線,而不是相同的2個功能副本粘貼10次?

+1

什麼? –

+1

請爲此避免使用宏。你能否將值'10'作爲參數傳遞給它,而只使用2個函數? –

+0

不幸的是,我無法爲此使用模板,這是針對嵌入式平臺的,並且回調函數無法接收參數,因此我需要爲每個回調函數定義一個函數。 –

回答

5

您可以使用token pasting##)來完成此操作。

#define SetupPin(n) void onPulse##n() { pulseList.push_back(n); } 

然後只需使用

SetupPin(10) 

這將擴大到

void onPulse10() { pulseList.push_back(10); } 
有關模板
+0

是否可以使用相同的宏擴展這兩個函數?在第一個函數之後的第二個函數是否可以使用? –

+0

@HamzaYerlikaya - 是的,這個宏可以擴展到任何東西 - 包括兩個功能。 –