2017-05-06 7 views
5

सी में अनिर्धारित व्यवहार उत्पन्न करने वाले पूर्णांक पर कई संचालन जंग में परिभाषित किए गए हैं। एक आम विषय यह है कि वे डीबग मोड में घबराते हैं और रिलीज मोड में एक परिभाषित गैर-दहशत परिणाम प्राप्त करते हैं। उदाहरण के लिए, डीबग मोड में हस्ताक्षरित पूर्णांक ओवरफ्लो पैनिक्स, लेकिन रिलीज मोड में लपेटें। wrapping_add(), saturating_add() आदि जैसे ऑपरेटर वेरिएंट भी परिभाषित किए गए हैंजंग में एक नकारात्मक मूल्य अपरिभाषित व्यवहार छोड़ दिया गया है?

लेकिन ऋणात्मक मूल्य को स्थानांतरित करने के बारे में क्या?

#[test] 
fn negative_shift() { 
    let i = -128i8; 
    let j = i << 1; 
    assert_eq!(j, 0); 
} 

हालांकि यह सफल होता है यह अभी भी व्यवहार अपरिभाषित किया जा सकता है ...

उत्तर

2

Rust Reference एक list of all undefined behavior है: यह सी में अपरिभाषित व्यवहार

निम्नलिखित परीक्षण का मामला जंग 1.17.0 में सफल होता है है । प्रकार के आकार से परे एक हस्ताक्षरित संख्या को स्थानांतरित करने के लिए सूची में नहीं है।

संबंधित मुद्दे