Zaujímalo by ma, či je možné poslať parameter a #define
makro pre výber iného výstupu
Napríklad:
#define Row(1) LPC_GPIO0
#define Row(2) LPC_GPIO3
#define Row(3) LPC_GPIO2
Potom v mojom kóde vytvorím slučku na odoslanie parametra
Row(x)
odpovede:
5 pre odpoveď č. 1Táto syntax makro neexistuje.
Navyše, to môže existovať, pretože makrá sú rozšírené pred kompilátor kompiluje kód. Ak tvoj x
isn "t kompilácie časovej konštanty, by nikdy nebol spôsob, ako určiť, čo nahradiť v zdrojovom kóde pre vyvolanie makra.
Ak potrebujete indexovať niektoré hodnoty, stačí použiť pole, napr. (za predpokladu, že tieto konštanty sú celé čísla):
static int rows[] = { 0, LPC_GPIO0, LPC_GPIO3, LPC_GPIO2 };
písanie
rows[x]
by mal účinok, ktorý sa zdá, že ste očakávali od neplatnej syntaxe makro.
1 pre odpoveď č. 2
ak chcete používať makrá
#define GPIOx(x) GPIO##x
a GPIOx(1)
sa rozšíri na GPIO1
0 pre odpoveď č. 3
Ak chcete, aby boli vypočítané pri behu, existuje spôsob, ako robiť to, čo chcete
#define Row(x) (x == 1 ? LPC_GPIO0 : (x == 2 ? LPC_GPIO3 : (x == 3 ? LPC_GPIO2 : ERROR_VALUE)))
Hoci to dostane chaotický, pretože počet možností sa zvyšuje
Aj keď chcete, aby sa toto vyhodnotilo pri kompilácii, väčšina optimalizačných kompilátorov by to urobila za vás, pokiaľ x je konštanta