2010-08-09 15 views
37

मैंने देखा कि कुछ बिंदु पर <? और >? ऑपरेटर जीसीसी में था। मैं जीसीसी 4.5 के तहत इनका उपयोग कैसे कर सकता हूं? क्या उन्हें हटा दिया गया है, और यदि ऐसा है, तो कब?सी विस्तार: <? and >? ऑपरेटरों

Offset block_count = (cpfs->geo.block_size - block_offset) <? count; 
cpfs.c:473: error: expected expression before ‘?’ token 
+0

ध्यान दें कि यह प्रश्न सी –

+0

पर विशिष्ट है इस प्रश्न के लिए सभी प्यार कहां से आ रहे हैं? धन्यवाद! –

+0

PHP शॉर्ट-फॉर्म टैग्स के साथ संयोग संबंधी समानता smci

उत्तर

38

हाल मैनुअल say:

जी ++ न्यूनतम और अधिकतम ऑपरेटरों ('<?' और '>?') और उनके मिश्रित स्वरूपों ('<?=') और '>?=') पदावनत किया गया है और अब जी ++ से हटा दिए गए हैं। इन ऑपरेटरों का उपयोग करने वाले कोड को std::min और std::max का उपयोग करने के लिए संशोधित किया जाना चाहिए।

पिछले दस्तावेजों की एक त्वरित खोज से संकेत मिलता है कि उन्हें संस्करण 4.0 के आसपास हटा दिया गया था (3.4.6 उनमें शामिल हैं, 4.0.4 नहीं है)। g++ (नहीं सी संकलक) के

+1

मुझे गलत पढ़ा जा सकता है, वे केवल जी ++ पर उपलब्ध थे? –

+0

@ मैट जॉइनर, दस्तावेज़ों का यही कहना है, हां: "जीएनयू सी ++ (लेकिन जीएनयू सी में नहीं)"। –

+4

यदि आप एक लिंक प्रदान कर सकते हैं तो मैं +1 देना चाहता हूं। –

8

इससे पहले पुनरावृत्तियों आप न्यूनतम या अधिकतम मान देने के लिए इन ऑपरेटरों का उपयोग किया है, लेकिन वे लंबे std::min और std::max के पक्ष में पदावनत किया गया है।

असल में, वे ( बिना या a के दोहरे मूल्यांकन b की संभावना लेकिन ) के बराबर:

a <? b  -->  (a < b) ? a : b 
a >? b  -->  (a > b) ? a : b 

उन्हें जगह के संदर्भ (और क्या तुम सच में उन्हें बदलना चाहिए) में, आप कर सकते हैं कुछ का उपयोग करें:

Offset block_count = cpfs->geo.block_size - block_offset; 
if (block_count > count) block_count = count; 

या समकक्ष std::min का उपयोग कर।

मैं सी/सी ++ "एक्सटेंशन" (विशेष रूप से उन लोगों को हटा दिया गया है और/या हटा दिया गया है) का उपयोग करने का एक बड़ा प्रशंसक नहीं हूं क्योंकि वे मुझे भाषा के एक विशिष्ट कार्यान्वयन से जोड़ते हैं।

आपको कभी भी गैर-मानक एक्सटेंशन का उपयोग नहीं करना चाहिए जहां एक पूरी तरह से पर्याप्त मानक विधि उपलब्ध हो।

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