C Öğreticisi 24 (Hata İşleme)

Bu yazılar www.tutorialspoint.com/cprogramming/ adresindeki yazı dizilerinin çevirileridir.

C programlama, hata işleme için doğrudan destek sağlamaz, ancak bir sistem programlama dili olarak, return(geri dönüş) değerleri şeklinde daha düşük düzeyde erişmenizi sağlar. C ve hatta Unix işlev çağrılarının çoğu herhangi bir hata durumunda -1 veya NULL döndürür ve bir hata kodu errno ayarlar. Genel değişken olarak ayarlanır ve herhangi bir fonksiyon çağrısı sırasında bir hata oluştuğunu gösterir. <Error.h> başlık dosyasında tanımlanan çeşitli hata kodlarını bulabilirsiniz.

Böylece bir C programcısı döndürülen değerleri kontrol edebilir ve dönüş değerine bağlı olarak uygun işlemi yapabilir. Bir programı başlatırken errno değerini 0 olarak ayarlamak iyi bir uygulamadır. 0 değeri, programda hata olmadığını gösterir.

errno, perror(). ve strerror() Fonksiyonları

C programlama dili, errno ile ilişkili metin mesajını görüntülemek için kullanılabilen perror () ve strerror () fonksiyonlarını sağlar.

perror () fonksiyonu, kendisine ilettiğiniz dizeyi ve ardından iki nokta üst üste işareti, boşluk ve ardından geçerli errno değerinin metinsel gösterimini görüntüler.

Geçerli errno değerinin metinsel gösterimine bir işaretçi döndüren strerror () fonksiyonu.

Bir hata koşulunu simüle etmeye ve var olmayan bir dosyayı açmaya çalışalım. Burada kullanımı göstermek için her iki fonksiyonu da kullanıyorum, ancak hatalarınızı yazdırmanın bir veya daha fazla yolunu kullanabilirsiniz. Dikkat edilmesi gereken ikinci önemli nokta, tüm hataları çıktılamak için stderr dosya akışını kullanmanız gerektiğidir.

#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, “errno’nun degeri : %d\n”, errno);

perror(“Hata perror tarafindan yazdirildi:”);

fprintf(stderr, “Dosya aciliminda hata: %s\n”, strerror( errnum ));

}

else

{

fclose (pf);

}

return 0;

}

Yukarıdaki kod derlenip çalıştırıldığında -

errno’nun degeri: 2

Hata perror tarafindan yazdirildi : No such file or directory

Dosya aciliminda hata: No such file or directory

Sıfır Hatayla Bölme İşlemi

Herhangi bir sayıyı bölmek, genel bir problemdir, programcıların bölenin 0 olup olmadığını kabul etmemesi nedeniyle çalışma zamanı hatası yaygın bir sorundur.

Aşağıdaki kod bölme işleminden önce bölenin 0 olup olmadığını kontrol ederek bunu çözer -

#include <stdio.h>

#include <stdlib.h>

main() {

int bolunen = 20;

int bolen = 0;

int bolum;

if( bolen == 0){

fprintf(stderr, “0’a bolunme islemi! Cikiliyor…\n”);

exit(-1);

}

bolum = bolunen / bolen;

fprintf(stderr, “Bolumun degeri : %d\n”, quotient );

exit(0);

}

Yukarıdaki kod derlenip çalıştırıldığında -

0’a bolunme islemi! Cikiliyor…

Program Exit Durumu

Genel olarak programın çıkışında EXIT_SUCCESS değeri kullanmak yaygın bir uygulamadır. Burada EXIT_SUCCESS bir makrodur ve 0 olarak tanımlanır.

Programınızda bir hata durumunuz varsa ve çıkıyorsanız, -1 olarak tanımlanan EXIT_FAILURE durumuyla çıkmanız gerekir. Şimdi yukarıdaki programı şöyle yazalım -

#include <stdio.h>

#include <stdlib.h>

main() {

int bolunen = 20;

int bolen = 5;

int bolum;

if( bolen == 0) {

fprintf(stderr, “0’a bolme islemi! Cikiliyor…\n”);

exit(EXIT_FAILURE);

}

bolum = bolunen / bolen;

fprintf(stderr, “Bolumun degeri : %d\n”, bolum );

exit(EXIT_SUCCESS);

}

Yukarıdaki kod derlenip çalıştırıldığında -

Bolumun degeri : 4

https://www.tutorialspoint.com/cprogramming/c_error_handling.htm

Last updated