Wpis z mikrobloga

#jezykc #programowanie a tak na prawdę to nie programowanie tylko edycja tekstu, bo preprocesor , więc wołam ludzi obserwujących taki #define #ifdef #endif #include. Nie wołam ludzi obserwujących pragma. ( ͡° ʖ̯ ͡°)
Zapomniałem i nie mogę znaleźć w googlu jak się sklejało makra.
Mam sobie plik nagłówkowy w którym są przykładowo:

#define GPIO_PinSource0 ((uint8_t)0x00)
#define GPIO_PinSource1 ((uint8_t)0x01)
#define GPIO_PinSource2 ((uint8_t)0x02)

oraz

#define GPIO_Pin_0 ((uint16_t)0x0001) /* Pin 0 selected */
#define GPIO_Pin_1 ((uint16_t)0x0002) /* Pin 1 selected */
#define GPIO_Pin_2 ((uint16_t)0x0004) /* Pin 2 selected */

W swoim kodzie wybieram pin

#define USED_PIN 1
i chcę, żeby wybranego pinu wiązała się tylko z edycją powyższego makra, nawet jeśli w kodzie mam funkcje które przyjmują jako argument pierwszy format (GPIO_PinSourceX) i funkcje które przyjmują drugi format(GPIO_Pin_X)

Tłumacząc ponownie, ale inaczej - potrzebuję w wywołanie funkcji wstawić makro które połączy mi "GPIO_PinSource" i to co jest po rozwinięciu USED_PIN - w rezultacie będzie GPIO_PinSource1 które się ładnie rozwinie do ((uint8_t)0x01).
W jakiejś książce widziałem przykłady makr do sklejania właśnie dwóch albo trzech (do wstawienia numerku/symbolu w środek), ale nie mam jej dostępnych.
Edit - zdecydowanie nie potrzebuję tekstu zakończonego \0.
  • 1
  • Odpowiedz
@kiciek: z głowy czy;li z niczego (jak powiedział kiedyś klasyk),

#define twojanazwa GPIO_PinSource##USED_PIN
Jeśli rzeczywiście oczywiście dobrze zrozumiałem Twoje intencje
  • Odpowiedz