Menguasai Penanganan Kesalahan dalam C: Praktik Terbaik & Teknik
Seperti yang diketahui, pemrograman C tidak menyediakan dukungan langsung untuk penanganan kesalahan tetapi sebagai bahasa pemrograman sistem, ini memberi Anda akses pada tingkat lebih rendah dalam bentuk nilai pengembalian. Sebagian besar panggilan fungsi C atau bahkan Unix mengembalikan -1 atau NULL jika terjadi kesalahan dan mengatur kode kesalahan errno. Ini diatur sebagai variabel global dan menunjukkan bahwa kesalahan terjadi selama panggilan fungsi apa pun. Anda dapat menemukan berbagai kode kesalahan yang didefinisikan dalam file header <error.h>.
Jadi seorang programmer C dapat memeriksa nilai yang dikembalikan dan dapat mengambil tindakan yang sesuai tergantung pada nilai pengembalian. Ini adalah praktik yang baik untuk mengatur errno ke 0 saat menginisialisasi program. Nilai 0 menunjukkan bahwa tidak ada kesalahan dalam program.
errno, perror(). dan strerror()
Bahasa pemrograman C menyediakan fungsi perror() dan strerror() yang dapat digunakan untuk menampilkan pesan teks yang terkait dengan errno.
Fungsi perror() menampilkan string yang Anda berikan kepadanya, diikuti oleh titik dua, spasi, dan kemudian representasi teks dari nilai errno saat ini.
Fungsi strerror(), yang mengembalikan pointer ke representasi teks dari nilai errno saat ini.
Mari kita coba mensimulasikan kondisi kesalahan dan mencoba membuka file yang tidak ada. Di sini saya menggunakan kedua fungsi ini untuk menunjukkan penggunaannya, tetapi Anda dapat menggunakan satu atau lebih cara untuk mencetak kesalahan Anda. Poin penting kedua yang perlu diperhatikan adalah Anda harus menggunakan aliran file stderr untuk mengeluarkan semua kesalahan.
#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, "Nilai errno: %d\n", errno); perror("Kesalahan dicetak oleh perror"); fprintf(stderr, "Kesalahan membuka file: %s\n", strerror( errnum )); } else { fclose (pf); } return 0; } Ketika kode di atas dikompilasi dan dieksekusi, hasilnya adalah sebagai berikut −
Nilai errno: 2 Kesalahan dicetak oleh perror: Tidak ada file atau direktori Kesalahan membuka file: Tidak ada file atau direktori
Kesalahan Pembagian dengan Nol
Ini adalah masalah umum bahwa pada saat membagi bilangan apa pun, programmer tidak memeriksa apakah pembagi adalah nol dan akhirnya menciptakan kesalahan runtime.
Kode di bawah ini memperbaiki ini dengan memeriksa apakah pembagi adalah nol sebelum membagi −
Live Demo
#include <stdio.h> #include <stdlib.h> main() { int dividend = 20; int divisor = 0; int quotient; if( divisor == 0){ fprintf(stderr, "Pembagian dengan nol! Keluar...\n"); exit(-1); } quotient = dividend / divisor; fprintf(stderr, "Nilai quotient : %d\n", quotient ); exit(0); } Ketika kode di atas dikompilasi dan dieksekusi, hasilnya adalah sebagai berikut −
Pembagian dengan nol! Keluar...
Status Keluar Program
Ini adalah praktik umum untuk keluar dengan nilai EXIT_SUCCESS dalam kasus program keluar setelah operasi berhasil. Di sini, EXIT_SUCCESS adalah makro dan didefinisikan sebagai 0.
Jika Anda memiliki kondisi kesalahan dalam program Anda dan Anda keluar maka Anda harus keluar dengan status EXIT_FAILURE yang didefinisikan sebagai -1. Jadi mari kita tulis program di atas sebagai berikut −
Live Demo
#include <stdio.h> #include <stdlib.h> main() { int dividend = 20; int divisor = 5; int quotient; if( divisor == 0) { fprintf(stderr, "Pembagian dengan nol! Keluar...\n"); exit(EXIT_FAILURE); } quotient = dividend / divisor; fprintf(stderr, "Nilai quotient : %d\n", quotient ); exit(EXIT_SUCCESS); } Ketika kode di atas dikompilasi dan dieksekusi, hasilnya adalah sebagai berikut −
Nilai quotient : 4