我定義如下,當然這是不正確......的#define語法的解決方案
#define SET_PIN_MODE_INPUT(DREG, PORT, PIN) (DREG &= ~_BV(PIN), PORT &= ~_BV(PIN))
#define LED_CLOCK_PIN (DDRB, PORTB, PB3)
,我想使用它們像這樣:
SET_PIN_MODE_INPUT(LED_CLOCK_PIN)
所以我需要幫助C語法。
我定義如下,當然這是不正確......的#define語法的解決方案
#define SET_PIN_MODE_INPUT(DREG, PORT, PIN) (DREG &= ~_BV(PIN), PORT &= ~_BV(PIN))
#define LED_CLOCK_PIN (DDRB, PORTB, PB3)
,我想使用它們像這樣:
SET_PIN_MODE_INPUT(LED_CLOCK_PIN)
所以我需要幫助C語法。
的間接要求:
#define SET_PIN_MODE_INPUT_(DREG, PORT, PIN) (DREG &= ~_BV(PIN), PORT &= ~_BV(PIN))
#define SET_PIN_MODE_INPUT(ARGS) SET_PIN_MODE_INPUT_ ARGS
// Note that this is an object-like macro
#define LED_CLOCK_PIN /**/ (DDRB, PORTB, PB3)
根據您當前的宏,您傳遞的一個參數SET_PIN_MODE_INPUT
,這需要三個參數。
該解決方案使用間接方式使用替換列表LED_CLOCK_PIN
作爲調用實際SET_PIN_MODE_INPUT
的參數列表。
「計算機科學中的所有問題都可以通過另一個間接層面來解決。」 - 大衛惠勒 –
@詹姆斯,或許應該提一下,宏和左邊的'('是這個工作的基本要素,甚至可能適合在兩者之間粘貼註釋以強調這一點。 –
還有一件事...有什麼辦法可以省略其中一個參數嗎?我還有兩個參數:'#define SET_PIN_VALUE_LOW_(PORT,PIN)(PORT | = _BV(PIN))',並且仍然希望通過'LED_CLOCK_PIN'和DDRB參數可以省略 – Pablo