2012-12-19 28 views
5

इस defect report सी ++ 03 के अनुसार स्टैंडर्ड गारंटी नहीं देता कि निम्नलिखित कोड में:एक अस्थिर चर से मूल्य लाने का एक C++ 03 अनुपालन तरीका क्या है?

volatile int x; 
void f() { 
    x; 
} 

चर से पढ़ा जाता है।

फिर मैं कोड कैसे लिखूं जो केवल अस्थिर चर मूल्य को पढ़ता है और परिणाम को छोड़ देता है (पढ़ने के लिए पढ़ा जाता है)?

+1

जिज्ञासा से बाहर, तुम क्यों यह करने के लिए करना चाहते हैं? –

+3

@AndreasBrinck मुझे नहीं पता कि ओपी यह विशेष रूप से क्यों चाहेगा, लेकिन यह एम्बेडेड प्रोग्रामिंग में काफी आम है, जहां आप मेमोरी-मैप किए गए रजिस्टर से पढ़ना चाहेंगे, और इससे पढ़ने से कुछ दुष्प्रभाव हो सकते हैं। –

+0

@ एंड्रियास ब्रिनक: ऑपरेटिंग सिस्टम को वास्तव में स्मृति पृष्ठ आवंटित करने के लिए यह आवश्यक है - आवंटन पहली पहुंच तक देरी हो रही है। – sharptooth

उत्तर

5

int i = x; काम करना चाहिए। इस कोड को बिल्कुल अस्थिर चर पढ़ने की आवश्यकता है और ऑप्टिमाइज़र को पढ़ने को अनुकूलित करने की अनुमति नहीं है। लेकिन चूंकि परिवर्तनीय i अप्रयुक्त है, इसलिए अनुकूलक पढ़ने वाले मूल्य को संग्रहीत करने में शामिल किसी भी अतिरिक्त कार्य से बच सकता है।

तुम भी संकलक चेतावनी से बचने के लिए कुछ इस तरह की जरूरत हो सकती: (void)i;