Witajcie.
Co do makr by wniósł dwie rzeczy.
Po pierwsze, i to jest ważne, w "prawej" części czyli zawartości makra, ujmowanie w nawiasy czegokolwiek bardziej złożonego. Można sobie zrobić kuku, jak kiedyś użyje się makra w kontekście złożonym, np wyrażenia. Są różne szkoły, i święte wojny jak te nawiasy zrobić, ale lepsze (prawie) dowolne, niż żadne.
Po drugie, ja jestem z tych, co makra "akcyjne (przeciwieństwo do "wartości" zwykle stałej w wyrażeniu) markuje nawiasem jak funkcja bezargumentowa
Więc
lub żeby nie wywołać polemiki super-hackerów C, jedna z ambitnych notacji
W ogóle jestem zwolennikiem odchodzenia od makr najbardziej jak się da, nowoczesne dialekty C (o C++ nie wspominam) mają funkcje inline, które mają wszystkie zalety makr (generowanie kodu maszynowego w miejscu, bez wywołania call, stosu itd) a nie mają wad i ryzyka.
Aha, makro bezargumentowe nie może koło tych nawiasów mieć spacji
Co do makr by wniósł dwie rzeczy.
Po pierwsze, i to jest ważne, w "prawej" części czyli zawartości makra, ujmowanie w nawiasy czegokolwiek bardziej złożonego. Można sobie zrobić kuku, jak kiedyś użyje się makra w kontekście złożonym, np wyrażenia. Są różne szkoły, i święte wojny jak te nawiasy zrobić, ale lepsze (prawie) dowolne, niż żadne.
Po drugie, ja jestem z tych, co makra "akcyjne (przeciwieństwo do "wartości" zwykle stałej w wyrażeniu) markuje nawiasem jak funkcja bezargumentowa
Więc
Kod:
#define LED_RED_ON() { LED_RED_GPIO->BSRRL = LED_RED_PIN; }lub żeby nie wywołać polemiki super-hackerów C, jedna z ambitnych notacji
Kod:
#define LED_RED_ON() do { LED_RED_GPIO->BSRRL = LED_RED_PIN; } while(0)W ogóle jestem zwolennikiem odchodzenia od makr najbardziej jak się da, nowoczesne dialekty C (o C++ nie wspominam) mają funkcje inline, które mają wszystkie zalety makr (generowanie kodu maszynowego w miejscu, bez wywołania call, stosu itd) a nie mają wad i ryzyka.
Aha, makro bezargumentowe nie może koło tych nawiasów mieć spacji
Jacek SP9IT

