SORU
16 Aralık 2013, PAZARTESİ


Neden bu C derleme (non-void işlev bir değer döndürmez)parçacık yok

Benim kütüphanelerinden biri bu sabah bunu buldum:

static tvec4 Min(const tvec4& a, const tvec4& b, tvec4& out)
{
    tvec3::Min(a,b,out);
    out.w = min(a.w,b.w);
}

Bu yöntem, hiçbir şey geri gelmiyor çünkü derleyici bir hata beklemiyordum, ve dönüş türü void değildir.

Akla gelen tek şey iki şey vardır

  • Bu yöntemi denir tek yer, dönüş değeri, kullanılan veya depolanan değil. (Bu yöntem void - tvec4 dönüş türü kopyala-yapıştır hatası olması gerekiyordu)

  • varsayılan tvec4 inşa biraz farklı olarak, oh, her şey görünüyor oluşturuluyor, C .

Bu adresleri C spec kısmını bulamadım. Başvurular (ha) takdir edilmektedir.

Güncelleme

bazışartlar, bu VS2012 bir hata oluşturur. Detayları azalttım olmadı ama ilginç yine de.

CEVAP
16 Aralık 2013, PAZARTESİ


Bu 13 ** C 11 draft standard Bölüm 6.6.3Return ifadesiparagraf2diyor ki:

[...] Bir fonksiyonun sonunda akan off değer bir dönüş eşdeğerdir; bir değer dönen tanımsız davranış bu sonuçlar işlevi. [...]

Bu derleyici her durumda teşhis etmek zor olabilir, çünkü bir hata bulunur, ne de bir uyarı genellikle zorunlu olmadığı anlamına gelir. Tanımı bu şekildetanımsız davranışbölümünde taslak standardında diyor ki: 7**

[...]İzin tanımsız davranış aralığından görmezden durum tamamen tahmin edilemeyen sonuçlar, davranış sırasında çeviri veya program yürütme bir şekilde belgelenmiş karakteristik çevresi (ile veya olmadan verildiği bir tanılama iletisi), sonlandırıcı bir çeviri ya da yürütme ile sanayi üretimi, bir tanılama iletisi).[...]

Bu durumda da gcc clang hem bir wanring bana buna benzer bir uyarı verir -Wall bayrak, kullanarak oluşturmak için elde edebiliriz:

uyarı: kontrol ulaştığı son boşluk olmayan fonksiyonu [-Wreturn-türü]

Bir hata -Werror=return-type bayrağı kullanarak bu özel uyarı çevirebiliriz. Ben de kendi kişisel projeleri için -Wextra -Wconversion -pedantic kullanmak gibi.

ComicSansMS bahseder gibiVisual Studiobu kod, varsayılan olarak bir hata olduğunu görüyorum mesajı olan: C4716 oluşturmak

hata C4716: '' : bir değer döndürmesi gerekir . Min

ve tüm kod yolları değer sonra dönecekti bu durumda bir uyarı olduğunu C4715, yaratacaktı.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • eisleyhead

    eisleyhead

    11 Ocak 2006
  • manadude21

    manadude21

    11 Mart 2008
  • Mr_BrettHooge

    Mr_BrettHoog

    3 Ocak 2011