/ / Sending parameter do #define - c, c-preprocesor, direktíva, preprocesor-smernica

Odosielanie parametra do #define - c, c - preprocesora, smernice, preprocessor - direktívy

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ď č. 1

Tá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