C/Powszechne praktyki: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
→‎Konwencje pisania makr: NIE WOLNO umieszczać średnika za dyrektywą
Linia 85:
#*'''Przykład:''' Definiujemy makro <code>#define suma(a, b) (a)+(b)</code> i wywołujemy je w kodzie <code>wynik = suma(3, 4) * 5</code>. Makro zostanie rozwinięte jako <code>wynik = (3)+(4)*5</code>, co - z powodu kolejności działań - da wynik inny niż pożądany.
# Jeśli makro składa się z wielu instrukcji lub deklaruje zmienne, powinno być umieszczone w pętli <code>'''do''' { ... } '''while'''(0)</code>, bez kończącego średnika. Pozwala to na użycie makra jak pojedynczej instrukcji w każdym miejscu, jak ciało innego wyrażenia, pozwalając jednocześnie na umieszczenie średnika po makrze bez tworzenia zerowego wyrażenia. Należy uważać, by zmienne w makrze potencjalnie nie kolidowały z argumentami makra.
#*Źle: <code>#define FREE(p) free(p); p = NULL;</code>
#*Dobrze: <code>#define FREE(p) do { free(p); p = NULL; } while(0)</code>
# Unikaj używania argumentów makra więcej niż raz wewnątrz makra. Może to spowodować kłopoty, gdy argument makra ma efekty uboczne (np. zawiera operator inkrementacji).