2010-11-03 8 views
6

यह C++ एक वैध कार्य है:इंट रिटर्न वापस करने के लिए घोषित एक समारोह कुछ भी नहीं। क्या यह अनिर्धारित व्यवहार है?

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

प्रश्न: करता है निम्नलिखित अभिव्यक्ति बयान कारण यूबी

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

निम्नलिखित परिभाषा यूबी का कारण बनता है?

f(); 

मानक से उद्धरण बहुत स्वागत है। धन्यवाद

चेतावनी: शैलीविज्ञान के बारे में टिप्पणी अप्रासंगिक हैं :)

+0

में यह सच नहीं है मैं 99.9 999% सुनिश्चित हूं कि यह एक यूबी है। और यहां तक ​​कि यदि यह नहीं है, तो यह एक प्रोग्रामिंग शैली नहीं है जो एक सिफारिश करेगा :) –

+0

किसी टिप्पणी में कोड निष्पादित करने का प्रयास करना यूबी नहीं है। –

+2

मुझे यह पसंद है कि सी # कंपाइलर इसे कैसे संभालता है: इस मामले में संकलन त्रुटि होगी: "सभी कोड पथ एक मान वापस नहीं करते हैं" – Andrey

उत्तर

8

सी ++ 03 §6.6.3/2:

एक समारोह के अंत की ओर बहने वाली के साथ एक लाभ के समतुल्य है कोई मूल्य नहीं; यह मूल्य-वापसी कार्य में अपरिभाषित व्यवहार में परिणाम देता है।

तो यह एक कार्य में स्वयं एक यूबी है।

BTW जीसीसी आप इस यूबी के लिए एक अच्छा चेतावनी इशारा देता है:

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

धन्यवाद! उत्तर 7 मिनट में स्वीकार किया जाएगा :) –

+3

एकमात्र उत्तर (4 में से) जो वास्तव में कहता है कि क्या पूछा गया था। – Andrey

+0

@ आर्मेन Tsirunyan: तो सटीक समय =) – vitaut

3

सी ++ 03, §6.6.3/2: "एक समारोह के अंत की ओर बहने वाली कोई साथ एक वापसी के बराबर है मूल्य; यह एक मूल्य-वापसी समारोह में अपरिभाषित व्यवहार में परिणाम देता है। "

ध्यान दें कि सी

+0

हम्म .. दिलचस्प। जवाब के लिए धन्यवाद। सी में केवल पहला मामला यूबी है? –

+0

सी में क्या होता है? – Lazer

+0

@ लाज़र: आपको मूल्य का उपयोग करना होगा। 'एफ(); अकेला ठीक है। – GManNickG