SORU
28 EYLÜL 2012, Cuma


Neden gcc bağımsız bir işlev bağımsız değişken ile tanımlanmıştır geçirilecek izin veriyor mu?

Neden bu kod derleme yapar?

#include <stdio.h>
void foo() {
    printf("Hello\n");
}

int main() {
    const char *str = "bar";
    foo(str);
    return 0;
}

gcc bile çok fazla argüman foo taşıyorum bir uyarı atmaz(). Bu beklenen bir davranış mı?

CEVAP
28 EYLÜL 2012, Cuma


C fonksiyonu boş parametre listesi ile bildirilen her zamanki aritmetik promosyonlar tabi çağrıldığını zaman argümanların rastgele bir sayı kabul eder. Bağımsız tedarik işlevinin tanımı için uygun olduğundan emin olmak için arayan sorumluluğundadır.

Bir fonksiyonu sıfır argüman alacak bildirmek için, void foo(void); yazmak gerekir.

Bu tarihi nedenlerden dolayı; aslında, C fonksiyonlarının prototipleri, C B, türsüz bir dil evrimleşmiş olarak yoktu. Prototip eklendiğinde, orijinal typeless tanımlamalar geriye uyumluluk için dil kalmıştı.

Boş parametre listesi hakkında uyarmak için gcc almak, -Wstrict-prototypes kullanın:

Eğer bir fonksiyon veya değişken türlerini belirtmeden ilan tanımlanır uyar. (Eski tip fonksiyon tanımı ise bağımsız değişken türleri belirten bir bildiri öncesinde bir uyarı olmadan izin verilir.)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ★TheCrono Official Channel★

    ★TheCrono

    3 Mayıs 2014
  • The CGBros

    The CGBros

    20 AĞUSTOS 2011
  • The Dubstep FX

    The Dubstep

    5 Mart 2011