CodeBlanks Logo Icon CodeBlanks

Hata dönüş değerleri

  • C kursu
  • Orta seviye
  • Ders 57/116
  • 5 dk

Fonksiyonlardan hata dönüş değerleri öğrenirsin.

Hata dönüş değerleri

Birçok C fonksiyonu hatayı dönüş değeriyle bildirir. fopen NULL, malloc NULL, fgetc EOF, printf negatif sayı, main ise sıfırdan farklı bir değer döndürür. Bu değerleri denetlemeden dönüş değerini kullanmak tanımsız davranıştır.

İyi alışkanlık: çağrıyı yap, sonucu denetle, hatayı ele al. Hata olduğunda ya return ile yukarı bildir ya da perror yazıp devam et. Hangi fonksiyonun hangi değeri döndürdüğünü kütüphane belgesinden öğren; her fonksiyon kendi değerini belirler.

Hata yayma desenleri

Bir fonksiyon içinde hatayı yakaladığında iki seçenek var: yukarı yaymak ya da ele almak. Yukarı yaymak için hatayı dönüş değeri yap: int read_config(void) { ... return -1; }. Çağıran da yine denetler.

Ele almak ise hatayı kabul edip alternatif yola geçmektir: FILE *f = fopen("config.txt", "r"); if (!f) f = fopen("default.txt", "r");. Hangisini seçeceğin bağlama bağlı: kritik hatalarda yay, kurtarılabilir hatalarda ele al. Karıştırmamak için tutarlı dönüş değerleri kullan.

Uygulama malloc sonucunu denetle

<stdio.h> ve <stdlib.h> başlıklarını ekle. main içinde int *p = malloc(sizeof(int)); ile bellek ayır. if (p == NULL) ise printf("bellek yok\n"); yazdır ve return 1;. Aksi halde *p = 42; ata, printf("%d\n", *p); yazdır, free(p); ile bırak. return 0; ile bitir.

Başlangıç kodu

main.c
#include <stdio.h>
// stdlib.h başlığını ekle

int main(void) {
    // malloc ile int için bellek ayır
    // NULL ise printf ve return 1
    // değilse *p = 42, printf, free
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int *p = malloc(sizeof(int));
    if (p == NULL) {
        printf("bellek yok\n");
        return 1;
    }
    *p = 42;
    printf("%d\n", *p);
    free(p);
    return 0;
}

Beklenen çıktı

42

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Fonksiyonu amacına eşle

Kavram Anlamı
fopen Dosya açar
malloc Bellek ayırır
fgetc Karakter okur
printf Yazı yazdırır

2 malloc başarısız olursa ne döndürür?

  • -1
  • EOF
  • NULL Doğru cevap
  • 0

Açıklama: malloc bellek ayıramazsa NULL döndürür.

3 malloc sonucunu denetle

Soru
int *p = malloc(sizeof(int));
if (p == ____) { return 1; }
Cevap
int *p = malloc(sizeof(int));
if (p == NULL) { return 1; }

Açıklama: malloc NULL dönerse bellek yok demektir.

Orta seviye bölümündeki tüm dersler