2013-03-12 4 views
12
void operator"" test(const char* str, size_t sz ) 
{ 
    std::cout<<str<<" world"; 
} 

int main() 
{ 
    "hello"test; 
    return 0; 
} 

जीसीसी 4.7 में, यह उत्पन्न करता है:क्या उपयोगकर्ता परिभाषित शाब्दिक में अनुपलब्ध अंडरस्कोर के बारे में जीसीसी चेतावनी को अक्षम करना संभव है?

मुझे समझ में क्यों इस चेतावनी उत्पन्न होता है "चेतावनी शाब्दिक ऑपरेटर से पहले नहीं प्रत्यय '_' भविष्य मानकीकरण [डिफ़ॉल्ट रूप से सक्षम] के लिए आरक्षित हैं", लेकिन जीसीसी कहते हैं, " डिफ़ॉल्ट रूप से सक्षम "।

क्या यह चेतावनी अक्षम हो सकता है कि वे केवल ध्वज के माध्यम से सभी चेतावनियों को अक्षम किए बिना?

+4

वाह, मुझे नहीं पता कि सी ++ 11 ओवरलोडिंग [ऑपरेटर ""] (http://ideone.com/ZDyCML) का समर्थन करता है। जिस तरह से विचार में मौजूद g ++ कम से कम चेतावनी नहीं देता है, लेकिन मेरा स्थानीय कंपाइलर करता है। सिर्फ 'जानकारी' को '_test' में बदलकर, अन्य की जानकारी (जिसे संदर्भ नहीं पता) के लिए चेतावनी दूर हो जाती है। – iammilind

+12

आप क्यों चाहते हैं? हर मौका है कि बाद में सी ++ संस्करणों में संभावित विरोधाभासी प्रतीकों शामिल होंगे। यह बुरी बात है*। जीसीसी की समस्या यह है कि यह आपको * त्रुटि * नहीं दे रहा है। –

+1

@ निकोल, आपकी टिप्पणी की सराहना करते हैं और यह चेतावनी वास्तव में मेरे लिए एक त्रुटि का परिणाम देती है क्योंकि मैं उपयोग करता हूं - वाइर। जीसीसी में हमारे पास कई मूल्यवान चेतावनियां हैं, फिर भी हम प्रोग्रामर को स्पष्ट रूप से अक्षम कर देते हैं। – cmeub

उत्तर

4

इस प्रश्न पर कई टिप्पणियां पढ़ने के बाद, मैंने सी ++ 11 मानक (गैर-अंतिम ड्राफ्ट N3337) की समीक्षा की।

जब मैंने कहा "मैं समझता हूं कि यह चेतावनी क्यों उत्पन्न हुई है" मुझे गलती हुई थी। मुझे लगता है कि एक अंडरस्कोर मानक द्वारा तकनीकी रूप से आवश्यक नहीं था, लेकिन केवल एक सिफारिश (इसलिए एक त्रुटि के बजाय चेतावनी)।

लेकिन निकोल Bolas के रूप में लाया गया है, जब उपयोगकर्ता परिभाषित शाब्दिक के बारे में बात मानक निम्नलिखित भाषा का उपयोग: "। शाब्दिक प्रत्यय पहचानकर्ता कि अंडरस्कोर से प्रारंभ नहीं है भविष्य मानकीकरण के लिए आरक्षित हैं"

"इस तरह के एक ud-suffix युक्त एक प्रोग्राम खराब गठित है, कोई निदान आवश्यक नहीं है।"

यह आरक्षित पहचानकर्ताओं और "वैकल्पिक प्रतिनिधित्व" जैसे "और", "या", "नहीं" के लिए उपयोग की जाने वाली भाषा के समान है। मुझे लगता है कि इससे यह स्पष्ट हो जाता है कि यह वास्तव में पहली जगह में एक चेतावनी नहीं होना चाहिए, लेकिन एक त्रुटि।

यह "अक्षम करना संभव है" के सवाल का सीधा जवाब नहीं हो सकता है, लेकिन यह मेरे लिए पर्याप्त उत्तर है।

निकोल अगर आप उत्तर के रूप में अपनी टिप्पणी जमा करना चाहते हैं तो मैं आपको अपना उत्तर बदल दूंगा (मुझे लगता है कि यह संभव है)।

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