Najlepszy samouczek C Obsługa błędów W 2024 r. W tym samouczku możesz dowiedzieć się errno, perror () i strerror (),Dzielenie przez zero błąd,Kodem zakończenia programu,
Język C nie zapewnia bezpośrednie wsparcie dla obsługi błędów, ale jako język programowania systemów, zwraca wartość formy pozwala na dostęp do danych źródłowych. W przypadku wystąpienia błędu, większość wywołaniu funkcji UNIX lub C zwraca 1 lub NULL, kod błędu będzie również ustawićwartość errno, to kod błędu jest zmienną globalną, to wyrażony w czasie wywołania funkcji błędu doszło.Można znaleźć wiele błędów kody <error.h> plik nagłówka.
Dlatego programiści C mogą zwracać wartości, sprawdzając, co właściwe działania i podejmowania decyzji w oparciu o wartości zwracanej. Deweloperzy powinni przy inicjalizacji programu, errno wartość 0, co jest dobrą praktyką programowania. Wartość 0 oznacza, że program nie ma błędów.
Języka C zapewniaperror () oraz funkcję strerror (),aby wyświetlić wiadomość tekstową powiązaną zerrno.
Załóżmy symulować fałszywe przypadku próby otwarcia pliku, który nie istnieje. Można używać na kilka sposobów wyjścia komunikat o błędzie, tu użyć funkcji do wykazania użycie. Inną rzeczą, aby pamiętać, że należy użyć pliku wyjściowego strumieniastderr do wszystkich błędów.
#include <stdio.h> #include <errno.h> #include <string.h> extern int errno ; int main () { FILE * pf; int errnum; pf = fopen ("unexist.txt", "rb"); if (pf == NULL) { errnum = errno; fprintf(stderr, "错误号: %d\n", errno); perror("通过 perror 输出错误"); fprintf(stderr, "打开文件错误: %s\n", strerror( errnum )); } else { fclose (pf); } return 0; }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
错误号: 2 通过 perror 输出错误: No such file or directory 打开文件错误: No such file or directory
Podczas podziału, dzielnik jest zero, jeśli nie jest zaznaczone, będzie skutkowało błędem wykonawczym.
Aby temu zapobiec, następujący kod przed dokonaniem podziału najpierw sprawdzi dzielnik jest zero:
#include <stdio.h> #include <stdlib.h> main() { int dividend = 20; int divisor = 0; int quotient; if( divisor == 0){ fprintf(stderr, "除数为 0 退出运行pl.\n"); exit(-1); } quotient = dividend / divisor; fprintf(stderr, "quotient 变量的值为 : %d\n", quotient ); exit(0); }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
除数为 0 退出运行pl.
W normalnych warunkach, skuteczna realizacja programu po normalnym czasie pracy wyjdzie o wartości EXIT_SUCCESS. Tutaj EXIT_SUCCESS makro, która jest definiowana jako 0.
Jeśli jest to błąd w programie, po zamknięciu programu, będzie prowadzić wartość statusu EXIT_FAILURE, jest zdefiniowany jako -1. W związku z tym, powyższe postępowanie może być zapisana jako:
#include <stdio.h> #include <stdlib.h> main() { int dividend = 20; int divisor = 5; int quotient; if( divisor == 0){ fprintf(stderr, "除数为 0 退出运行pl.\n"); exit(EXIT_FAILURE); } quotient = dividend / divisor; fprintf(stderr, "quotient 变量的值为: %d\n", quotient ); exit(EXIT_SUCCESS); }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
quotient 变量的值为 : 4