![](/img/trans.png)
[英]Comma in a macro to pass arguments to a another macro function ( #define a,b )
[英]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.