#define una tupla en C

Quiero poder definir una tupla que represente los argumentos que necesitan otras macros.

Creo que la mejor manera de mostrar lo que quiero es mostrar un ejemplo:

#include <avr/io.h>

#define LED_PORT PORTB
#define LED_DDR  DDRB
#define LED_PIN  PB7
#define LED      LED_PORT, LED_DDR, LED_PIN

#define OUTPUT(port, ddr, pin) ddr |= 1 << pin

void main(void) {
    OUTPUT(LED);
}

yo quieroOUTPUT(LED) para luego ser expandido en:

LED_DDR |= 1 << LED_PIN

El problema que obtengo tiene que ver con el orden de expansión y da como resultado el siguiente error:

La macro "SALIDA" requiere 3 argumentos, pero solo 1 dado

Esto es para usar con un proyecto AVR con hardware personalizado donde he definidoLED y otros componentes con un respectivoLED_PORT LED_DDR yLED_PIN.

Luego quiero definir más macros que puedan tomar este LED y usar los argumentos apropiados para mapear de la manera más sucinta posible.

¿Es esto posible con el preprocesador C estándar?

Respuestas a la pregunta(1)

Su respuesta a la pregunta