Jak radzić sobie z błędami w języku C

Jak radzić sobie z błędami w języku C
C jest silnym językiem programowania, który jest często stosowany w tworzeniu oprogramowania systemowego, urządzeń osadzonych, a także systemów operacyjnych. Z drugiej strony obsługa błędów w C może być trudnym obowiązkiem dla tych, którzy nie są kompetentnymi programistami. W poniższej sekcji przyjrzymy się niektórym podstawowym podejściom do radzenia sobie z błędami w programowaniu C.

Jak radzić sobie z błędami w języku C

Zasadniczo istnieją dwa rodzaje błędów, które istnieją w programowaniu C, które są następujące:

  • Błędy składniowe
  • Błędy w czasie wykonywania

Jakie są błędy składniowe

Błędy składniowe są spowodowane nieprawidłową składnią w kodzie, a kompilator może łatwo je wykryć podczas procesu kompilacji. Aby uniknąć błędów składniowych, lepiej zrozumieć podstawowe reguły składni programowania C.

Jakie są błędy czasu wykonywania

Błędy w czasie wykonywania wystąpią, gdy program jest wykonywany i może powodować różne problemy, takie jak wycieki pamięci, usterki segmentacji i nieprawidłowe użycie wskazówek.

Jak poradzić sobie z błędami

Aby poradzić sobie z tymi błędami, musimy zrozumieć główny powód wystąpienia tego rodzaju błędów, abyśmy mogli je odpowiednio zająć się nimi.

W C można wykorzystać zintegrowane procedury korekcji błędów do zarządzania błędami. C Language zapewnia kilka wbudowanych funkcji, które mogą pomóc zidentyfikować i naprawić błędy. Poniżej znajduje się lista funkcji obsługi, których można użyć w programowaniu C:

  • Za pomocą funkcji Perror ()
  • Za pomocą funkcji Strorror
  • Za pomocą funkcji Exit ()
  • Za pomocą funkcji Assert ()

1: Za pomocą funkcji Perror ()

Perror () jest wbudowaną funkcją w programowaniu C, która służy do wydrukowania komunikatu o błędzie na standardowym wyjściu błędu (STDERR) w oparciu o kod błędu ustawiony przez poprzednie wywołanie funkcji, które nie powiodło się. Jeśli jest to ciąg i nie jest null, jest zapisywany przed tekstem błędu. Na przykład, jeśli pracujesz z plikami, a operacja pliku się nie powiedzie, możesz użyć Perror () funkcja do wydrukowania komunikatu o błędzie na standardowym błędzie:

#włączać
#włączać
#włączać
int main ()
Plik *fp;
fp = fopen („no_file.txt "," r ");
if (fp == null)
printf („Liczba błędu: %d \ n”, errno);
Perror („Błąd to:”);

Powyższe C definiuje funkcję main (), która próbuje otworzyć nieistniejący plik w trybie odczytu za pomocą fopen () funkcjonować. fopen () daje NULL i tworzy globalną wartość errno, ponieważ brakuje pliku. Następnie program drukuje numer błędu za pomocą errno i komunikat o błędzie za pomocą Perror ().

Wyjście

2: Za pomocą funkcji strerror ()

strerror () Funkcja jest wbudowaną funkcją obsługi błędów, która służy do pobierania komunikatu o błędzie czytelnym człowieka dla danego kodu błędu. Zmienna globalna Errno jest zwykle używana jako wejście kodu błędu do strerror () funkcjonować. Gdy błąd występuje podczas wykonywania programu, kod błędu jest zwykle ustawiany na określoną wartość przez system lub funkcję biblioteki, która wykryła błąd. Ten kod błędu można następnie użyć do wyszukiwania odpowiedniego komunikatu o błędzie za pomocą strerror () funkcjonować.

strerror () Funkcja dostarcza łańcuch zakończony null, który zawiera komunikat ostrzegawczy dla określonego kodu błędu. Ten komunikat o błędzie można wydrukować na konsoli lub wyświetlić użytkownikowi, aby podać informacje o przyczynie błędu.

#włączać
#włączać
#włączać
int main ()
Plik *fp = fopen („no_file.txt "," v ");
if (fp == null)
printf („Błąd występuje w pliku otwierającym: %s \ n”, strerror (errno));

Powyższy kod określa funkcję main (), która próbuje otworzyć nieistniejący plik w trybie „V” za pomocą fopen () funkcjonować. fopen () wyprowadza null i aktualizuje globalny wskaźnik errno, ponieważ otwarty plik nie jest obecny. Następnie program drukuje komunikat o błędzie za pomocą strerror () funkcja, aby przekonwertować kod błędu w errno na komunikat o błędzie czytelnionego człowieka.

Wyjście

3: Za pomocą funkcji exit ()

Wyjście() Funkcja to kolejny użyteczny sposób do użycia do obsługi błędów, który natychmiast kończy program z określonym statusem wyjścia. Kiedy program nie może kontynuować z powodu śmiertelnego błędu lub wyjątkowej sytuacji, kończy go.

Metoda exit () akceptuje wejście liczb całkowitych reprezentujących stan wyjścia programu. Wartość zero wskazuje na dopuszczalne zakończenie, ale wartości niezerowe wskazują błąd lub nieprawidłowe zakończenie.

#włączać
#włączać
int main ()
Plik *plik = fopen („no_file.txt "," z ");
Jeśli (!plik)
printf („błąd: nie można otworzyć pliku \ n”);
wyjście (1);

Powyższy program otwiera plik o nazwie "brak pliku.tekst" W trybie „Z”. Jeśli plik nie zostanie znaleziony, wydrukuje komunikat o błędzie i zakończy program za pomocą Wyjście() Funkcja z kodem stanu 1.

Wyjście

4: Za pomocą funkcji Assert ()

zapewniać() Funkcja jest użytecznym narzędziem do obsługi błędów podczas tworzenia programu. Umożliwia programistom łapanie i obsługę błędów logicznych lub programistycznych, które mogą prowadzić do niezdefiniowanego zachowania lub awarii programu.

Podczas korzystania z zapewniać() funkcja, logiczne wyrażenie jest przekazywane jako argument. Nic się nie dzieje, jeśli oświadczenie oceni True, a program przebiega normalnie. Jeśli jednak wyrażenie ocenia fałszywe, zapewniać() Funkcja drukuje komunikat o błędzie do konsoli i natychmiast kończy program.

#włączać
#włączać
int main ()
int a = 5;
Assert (a == 10);
printf („a is %d \ n”, a);
powrót 0;

W powyższym kodzie funkcja assert jest używana do sprawdzenia, czy wartość A jest równa 10. Jeśli A nie jest równe 10, program zatrzyma się i wyświetli komunikat o błędzie. Jeśli A jest równe 10, program będzie kontynuowany normalnie i wydrukuje wartość x.

Wyjście

Wniosek

C zapewnia kilka funkcji obsługi błędów, które programiści mogą użyć do poprawy niezawodności i odporności swoich programów. Funkcje te obejmują Perror (), strerror (), exit () I zapewniać(). Korzystając z tych funkcji, ważne jest, aby przestrzegać najlepszych praktyk obsługi błędów, takich jak sprawdzanie wartości zwrotnych z funkcji i obsługę błędów w sposób, który nie zagraża bezpieczeństwa lub stabilności programu.