2012-11-08 77 views
2

#define語句括號假設我有一個函數C.如何您在使用C

uint8_t readPin(uint8_t); 

uint8_t readPin(uint8_t pin_num) 
{ 
    switch pin_num 
    { 
     case 0: 
      return(PORTAbits.RA3); 
      break; 
     case 1: 
     ...and so on 
    } 
} 

我想用一個更可讀的名字來稱呼引腳(可重新映射)。舉例來說,我希望能寫:

openDoor(); 

調用

readPin(2); 

我嘗試使用

#define openDoor() readPin(2) 

但是,這並不因爲括號的工作。有沒有人有關於如何做到最好的建議?我不能只重新命名readPin函數,因爲我希望有多於1個不同的別名,具體取決於我包含哪個頭文件。

+4

你是什麼意思「不起作用」?這應該工作得很好。 –

+0

你有錯誤的編譯信息嗎? – Jack

+0

也許警告是由於別的東西而產生的,我錯誤地認爲是假設是由於#define無法正常工作。 – Adam

回答

3
#define openDoor() readPin(2) 

你有什麼是好的前更換。宏可以有參數列表,甚至是空的參數列表,所以這將做你想做的。

但是,我警告不要使用這樣的預處理器。最好避免使用預處理器,特別是當語言可以完成同樣的事情時。一方面,調試器看不到預處理器宏。

void openDoor() 
{ 
    readPin(2); 
} 
1

#define openDoor() readPin(2)

它應該工作正常。 因爲#define僅用於在編譯即預處理之前替換找到替換標記併爲其定義的適當值進行替換。

所以,如果你寫openDoor()它將與readPin(2)編譯

相關問題