簡體   English   中英

將宏參數傳遞給帶逗號的函數

[英]Passing macro arguments to function with comma

在MSP430世界中,driverlib具有使用GPIO引腳的功能:

GPIO_SetAsInputPin(port, pin)

我想要一個宏來定義一個引腳,例如:

#define PB1     (GPIO_PORT_P2, GPIO_PIN4)
#define PB2     (GPIO_PORT_P2, GPIO_PIN5)

當我使用宏調用該函數時:

GPIO_setAsInputPin(PB1);

我在函數調用錯誤中得到的參數太少。 有其他方法可以使這項工作嗎?

PB1擴展的括號使它成為單個參數,並且在兩者之間使用逗號運算符,因此您的調用擴展為:

GPIO_setAsInputPin((GPIO_PORT_P2, GPIO_PIN4))

您可能應該使用:

#define PB1   (GPIO_PORT_P2), (GPIO_PIN4)

擴展為:

GPIO_setAsInputPin((GPIO_PORT_P2), (GPIO_PIN4))

給你兩個論點。 或者,您可以省略名稱周圍的括號,這樣可能很安全。

如果GPIO_setAsInputPin本身是一個需要兩個參數的宏,您可能仍然會遇到問題。 然后,您將需要以下內容:

#define GPIO_setAsInputPin_1(x)    GPIO_setAsInputPin(x)

然后您將調用:

GPIO_setAsInputPin_1(PB1);

然后您將得到輸出:

GPIO_setAsInputPin((GPIO_PORT_P2), (GPIO_PIN4));

或底層宏擴展到的任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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