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

  • Air_Fooj

    Air_Fooj

    24 NİSAN 2009
  • Bart Baker

    Bart Baker

    1 Aralık 2006
  • BrandonHarrisWalker

    BrandonHarri

    27 Kasım 2006