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

  • BaaaStuds's channel

    BaaaStuds's

    10 Mart 2009
  • HER0R

    HER0R

    16 Aralık 2007
  • jcortes187

    jcortes187

    24 Mart 2006