सी ++ के विपरीत, सी const_cast
की कोई धारणा नहीं है।एक संघ अपरिभाषित व्यवहार के माध्यम से कास्टिंग-कास्टिंग है?
void const * p;
void * q = p; // not good
सबसे पहले: है इस कलाकारों वास्तव में अपरिभाषित व्यवहार है कि वहाँ एक अयोग्य सूचक के लिए एक स्थिरांक योग्य सूचक कन्वर्ट करने के लिए कोई वैध तरीका है, है?
किसी भी घटना में, जीसीसी इस बारे में चेतावनी देता है। "साफ" कोड बनाने के लिए जिसके लिए एक कॉन्स-कास्ट की आवश्यकता होती है (यानी जहां मैं गारंटी दे सकता हूं कि मैं सामग्री को म्यूटेट नहीं करूँगा, लेकिन मेरे पास सब कुछ एक परिवर्तनीय सूचक है), मैंने निम्नलिखित "रूपांतरण" चाल देखी है:
typedef union constcaster_
{
void * mp;
void const * cp;
} constcaster;
उपयोग: u.cp = p; q = u.mp;
।
ऐसे संघ के माध्यम से दूरसंचार को दूर करने के लिए सी भाषा नियम क्या हैं? सी का मेरा ज्ञान केवल बहुत ही कमजोर है, लेकिन मैंने सुना है कि सी सी ++ की तुलना में संघ पहुंच के बारे में अधिक स्पष्ट है, इसलिए जब मुझे इस निर्माण के बारे में बुरा लगा है, तो मुझे मानक से एक तर्क चाहिए (सी 99 मुझे लगता है, हालांकि अगर यह सी 11 में बदल गया है तो यह जानना अच्छा होगा)।
आप 'शून्य * q = (शून्य *) p' में पहली कोड ब्लॉक मतलब है? – kennytm
@ केनीटीएम: हाँ - क्या मुझे स्पष्ट कलाकारों की आवश्यकता है, और/या इससे कोई फर्क पड़ता है? –
अंतर्निहित कास्ट जीसीसी के बिना क्वालीफायरों को हटाने के बारे में चेतावनी दी गई है। लेकिन जीसीसी अभी भी एक त्रुटि रिपोर्ट करता है ("प्रारंभकर्ता तत्व निरंतर नहीं है") कास्ट के साथ भी। –