2010-11-03 20 views
6

Bu C++ geçerli bir fonksiyonudur:İçe dönmek üzere bildirilen bir işlev hiçbir şey döndürmez. Bu Tanımsız Davranış mı?

int x = f(); //return value used 

soru: mu Aşağıdaki onermesinin nedeni UB

int f() 
{ 
    if(false) 
    { 
     return 42; 
    } 
} 

aşağıdaki tanım UB neden olur?

f(); 

Standarttan alıntılar çok hoş olurdu. Teşekkür

Uyarı: üslup yaklaşık Açıklamalar :) alakasız

+0

% 99.9999 eminim ki bu bir UB. Ve olmasa bile, bu tavsiye edeceği bir programlama stili değildir :) –

+0

Bir yorumda kod çalıştırmaya çalışmak UB değildir. Bu durumda derleme hatası olacaktır: i C# derleyicisi bu nasıl işleyeceğini gibi –

+2

Söylediklerinizi UB değilse "Tüm kod yolları bir değer döndürmek değil" – Andrey

cevap

8

C++ 03 §6.6.3/2: Bir fonksiyonun ucundan akan

bir dönüş eşdeğerdir değersiz; Bu, bir değer döndüren işlevde tanımlanmamış davranışla sonuçlanır.

Yani bu bir fonksiyonu kendi içinde bir UB olduğunu.

BTW gcc bu UB için güzel uyarı işaret verir:

In function 'int f()': 
Line 7: warning: control reaches end of non-void function 
+0

Teşekkürler! Cevap 7 dakika içinde kabul edilecektir :) –

+3

sorulan gerçekten söyleyen tek cevap (4 üzerinden). – Andrey

+0

@Armen Tsirunyan: Çok hassas zamanlama =) – vitaut

3

C §6.6.3/2 ++ 03, "Bir fonksiyonun sonuna yola akan rengi olmayan bir dönüş eşdeğerdir Bu, değer döndüren bir işlevde tanımlanmamış davranışla sonuçlanır. "

Aynı şeyin C.'de doğru olmadığını unutmayın.

+0

Hmm .. ilginç. Cevap için teşekkürler. SO sadece ilk durumda UB mi? –

+0

C'de ne olur? – Lazer

+0

@Lazer: Değeri kullanmalısın. 'f();' Yalnız iyidir. – GManNickG

İlgili konular