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
Bu 13 ** C 11 draft standard Bölüm 6.6.3
Return 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ı.
Neden herhangi bir parametre (asıl fon...
Neden bu parçacık üniforma başlatma ku...
Neden Python kodunu daha hızlı bir işl...
Neden İfade<İşlev<T> kullanırs...
Neden C derleme bu kadar uzun sürüyor?...