Widziałem #ifndef ABC
i #if !defined (ABC)
w tym samym źródłowym pliku C.różnica między "ifndef" i "if! Defined" w C?
Czy istnieje subtelna różnica między nimi? (Jeśli jest to kwestia stylu, dlaczego ktoś użyłby ich w tym samym pliku)
Widziałem #ifndef ABC
i #if !defined (ABC)
w tym samym źródłowym pliku C.różnica między "ifndef" i "if! Defined" w C?
Czy istnieje subtelna różnica między nimi? (Jeśli jest to kwestia stylu, dlaczego ktoś użyłby ich w tym samym pliku)
Nie, nie ma żadnej różnicy między nimi, gdy używany w ten sposób. Ta ostatnia forma (przy użyciu defined()
) jest przydatna, gdy początkowy #if
lub jeden z następujących warunków #elif
wymaga bardziej złożonego testu. #ifdef
nadal będzie działał, ale może być bardziej przejrzysty, używając w tym przypadku #if defined()
. Na przykład, jeśli trzeba przetestować, czy zdefiniowano więcej niż jedno makro, lub jeśli jest równa określonej wartości.
Wariancja (wykorzystując obie w pliku) może zależeć od konkretnych subtelności w użyciu, jak wspomniano powyżej, lub po prostu słabej praktyki, przez brak spójności.
W kontekście, który podałeś, są one takie same: po prostu sprawdzasz istnienie jednego makrowego identyfikatora.
Jednak formularz #if umożliwia ocenę wyrażeń, które mogą być przydatne.