Twój kod nie jest całkowicie poprawna, proponuję umieścić pustych nawiasów w makro
#define somemacro(a) {}
Powód jest prosty, to kod będzie znacznie bardziej bezpieczny!
wziąć ten przykład:
if(Value)
somemacro(a)
else
somemacro(b)
Jeśli makro jest pusty Twój kod nie będzie kompilować! (Oczekiwany pierwotny-expressione przed "innym"). W każdym razie niektóre reguły stylu zmuszają Cię do napisania tego obiektu, więc nie będzie to stanowić problemu.
Inną opcją jest użycie ";" zamiast "{}", ale ta opcja w tym samym przypadku da ci ostrzeżenia dotyczące czasu kompilacji, podczas gdy puste nawiasy nie będą dawały ostrzeżeń ani błędów! (Średnik jest jeszcze lepiej, nawet jeśli dają ostrzeżenia);)
odbioru następujący przypadek
if(value)
somemacro(a);
else
somemacro(b);
wzrośnie do
if(value)
{};
else
{};
że nie można skompilować!
Dlatego makra są złe
(ponieważ makra są proste tekstu wymiana, rządy dumbs powinno być zawsze próbować ręcznie zastąpić kod i zobaczyć co się dzieje, są też narzędzia, które zastąpią makra wyświetlasz rozszerzony kod.)
Nadal zgadujesz, czy istnieje makro, które jest całkowicie bezpieczne? Tak to się nazywa „NOP”
#define somemacro(a) ((void)0)
że zadziała w każdym przypadku (nawet pliki źródłowe kompilatory użyć jej jako NOP, na przykład wystarczy spojrzeć na „assert.h”
to jest bardzo przydatna odpowiedź, myślę, że dobra robota ;) – GameDeveloper
Cześć Nie rozumiem twojego pierwszego kodu [tutaj próbowałem] (http://codepad.org/WbSlIXkc) .. Myślę, że to po prostu błąd zapisu 'int foo (int UNUSED (wartość)) jeśli definicja makra to balan **? ** –
@GrijeshChauhan, właśnie odkryłeś jedną z różnic między C i C++. Zobacz tutaj: http://codepad.org/flX8m3sk –