Czy to jest zła praktyka, aby z nich korzystać?
Jeśli nadużyto, tak, szczególnie assert
.
Jeden nadużycie zależy od tych oświadczeń assert
, aby być aktywnym. Nigdy nie powinieneś polegać na assert
, aby cokolwiek zrobić, ponieważ kod można skompilować z NDEBUG
zdefiniowanym, a następnie assert
nic nie robi. Kod produkcyjny jest często kompilowany z NDEBUG
zdefiniowany w celu zapewnienia, że te instrukcje assert
znikną.
O ile nie piszesz jednorazowego programu, który nie będzie trwał dłużej niż dzień lub dwa, nie powinieneś używać do sprawdzania danych wprowadzanych przez użytkownika. Użytkownicy nie dbają o to, gdzie kod się nie powiódł, a wydrukowany komunikat wygląda jak język obcy dla wielu użytkowników. Nie informuje użytkownika, jak naprawić błąd. Z założenia jest również bardzo pamiętliwy. Komunikat wygenerowany w odpowiedzi na błąd wprowadzany przez użytkownika powinien być komunikatem informującym użytkownika, jak rozwiązać problem. Najlepszą akcją po wiadomości jest zaoferowanie użytkownikowi sposobu na naprawienie błędu. Jeśli nie można tego zrobić, a jedyną możliwą odpowiedzią jest zakończenie programu, program powinien zakończyć się w sposób czysty. Zgodnie z projektem, assert
nie powoduje całkowitego wyłączenia. Wzywa on abort()
zamiast exit()
.
Jedną z konsekwencji abort()
na wielu komputerach jest generowanie zrzutu pamięci. Zrzut główny jest świetnym komunikatem o błędzie dla programisty. Z zrzutem rdzenia programista może użyć debuggera, aby zobaczyć, co poszło nie tak z dużą szczegółowością. Minusem abort()
jest to, że rzeczy nie są sprzątane. Przerwij "kończy program bez wykonywania destruktorów dla obiektów o automatycznym lub statycznym czasie przechowywania i bez wywoływania funkcji przekazanych do atexit()
." Podsumowując: Używanie assert
jest w porządku (i dobrze) do testowania błędów programistycznych, ale tylko w ustawieniach nieprodukcyjnych. Użyj czegoś innego, aby przetestować błędy użytkowników.
'static_assert' to deklaracja wbudowana w rdzeń. Nie rozszerza się do niczego, ponieważ jeśli nie powiedzie się, kompilacja ustaje. – jrok
@KerrekSB Zapytałem ** trzy ** jasne pytania, proszę poświęć trochę czasu, aby je przeczytać przed przyjęciem założenia. – Oleksiy
Używasz asert, aby określić, że jest błąd w logice programowania i że powinien on zostać naprawiony w kodzie. 'if' jest używane do rozgałęzienia między różnymi ścieżkami logicznymi w kodzie. Jest to duża różnica, aby – Default