Ich möchte in der Lage sein, ein Tupel zu definieren, das die Argumente anderer Makros darstellt.#define ein Tupel in C
ich die beste Art und Weise denken, was ich zeigen will, ist ein Beispiel zeigen:
LED_DDR |= 1 << LED_PIN
Das Problem, das ich bekommen ist:
#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);
}
Ich möchte OUTPUT(LED)
dann in erweitert werden tun mit der Reihenfolge der Erweiterung und führt zu den folgenden Fehler:
macro "OUTPUT" requires 3 arguments, but only 1 given
Dies ist fo r Verwendung mit einem AVR-Projekt mit kundenspezifischer Hardware, wo ich LED
und andere Komponenten mit jeweils LED_PORT
LED_DDR
und definiert habe.
Ich möchte dann mehr Makros definieren, die diese LED nehmen und die passenden Argumente verwenden können, um die kürzeste Möglichkeit zu erreichen.
Ist dies mit dem Standard-C-Präprozessor möglich?
Zeigen Sie die Definition von 'LET_PIN' und' LET_PORT' sowie 'LET_DDR' und' OUTPUT' an. Also * redigiere deine Frage * um sie zu verbessern. –
Ich würde diese Frage mit [Tag: c-Präprozessor] kennzeichnen. – Michas
Können wir annehmen, dass 'PORTB',' DDRB', 'PB7' literale ganzzahlige Konstanten sind? –