To zależy od tego, ile przenośny Oczekuje się program być.
Tak długo, jak piszesz program, który ma działać z kompilatorami, które znasz zdecydowanie wspierają #prama once
, wystarczy użycie #pragma once
powinno wystarczyć. Ale robiąc to, ograniczasz swój program do zestawu kompilatorów, które obsługują określoną funkcję.
Jeśli potrzebujesz programu do pracy na wszystkich kompilatorach, powinieneś użyć #pragma once
i dołączyć oba strażników.
W przypadku kompilator nie obsługuje #pragma once
będzie to po prostu zignorować to [Ref # 1], w takim przypadku strażnicy header będzie służył celowi, więc nic złego w korzystaniu z ich obu, jeśli nie są świadomi funkcji obsługiwanych przez kompilatory docelowe.
Jeśli chcesz, aby Twój program był w 100% przenośny na różnych kompilatorach, idealnym rozwiązaniem jest użycie tylko osłony. Jako że @CharlesBailey słusznie zwraca uwagę, ponieważ zachowanie dla #pragma once
jest określoną implementacją, zachowanie na nieznanym kompilatorze może mieć szkodliwy wpływ na twój program.
[Nr 1] 03
standard C++ 16,6 dyrektywy Pragma
Dyrektywa przerób formy
# pragma pp-tokensopt new-line
powoduje implementacja do zachowania w sposób zdefiniowany przez implementację. Każda pragma, która nie jest rozpoznawana przez implementację, jest ignorowana.
Pamiętaj, że starsze wersje wymienionych kompilatorów mogą go nie obsługiwać, więc jeśli tworzysz program o otwartym kodzie źródłowym, który ma być dystrybuowany, wówczas pragma może nie działać. –
Nie chodzi tylko o obsługę kompilatora, ale także zależy od tego, jak skomplikowane jest środowisko. Czy ufasz kompilatorowi, aby wiedzieć * na pewno *, jeśli dwa pliki są takie same lub nie, w tym wszystkie zawieszenia sieci i linki symboliczne? –
również rozważyć pomocnicze narzędzia, takie jak indeksatory i analizatory. nie może istnieć pełny preprocesor lub analizator składni, tak jak w przypadku kompilatora. – justin