2011-12-27 14 views
23

इस सी ++ कोड नहीं VS2010 के तहत क्यों संकलित करता है:क्या मैं लूप के प्रारंभ में विभिन्न प्रकार के चर घोषित कर सकता हूं?

for (int a = 0, short b = 0; a < 10; ++a, ++b) {} 

जबकि यह एक करता है:

short b = 0; 
for (int a = 0; a < 10; ++a, ++b) {} 

अंदर के लिए लूप प्रारंभकर्ता निषिद्ध विभिन्न प्रकार के दो चर की घोषणा है? यदि हां, तो आप इसके आसपास कैसे काम कर सकते हैं?

+0

की तरह लग रहा है इस अंकन उपयोग करना चाहते हैं के साथ एक बयान के समाप्त होने है तुम कहो। उसी प्रकार का उपयोग करना: '(int a = 0, b = 0; a <10; ++ a, ++ b) {} 'हम्म। इससे पहले कभी नहीं देखा। –

+0

हां यह सी भाषा से आया "डबल लूप" तंत्र है। काफी दुर्लभ, यद्यपि। बहुत पठनीय नहीं है। – Raveline

उत्तर

40

हां, यह निषिद्ध है। जैसे ही आप एक घोषणा कथन में अलग-अलग प्रकार के चर घोषित नहीं कर सकते ( संपादित करें: घोषणाकर्ता संशोधक संशोधक modriers @Mrlister उल्लेख करता है)। आप structs

घोषणा कर सकते हैं
for (struct { int a = 0; short b = 0; } d; d.a < 10; ++d.a, ++d.b) {} 

सी ++ 03 कोड:

for (struct { int a; short b; } d = { 0, 0 }; d.a < 10; ++d.a, ++d.b) {} 
बेशक

जब सभी 0 हैं, तो आप initializers पूरी तरह छोड़ देते हैं और = { } लिख सकते हैं।

+20

मुझे इस तथ्य से नफरत है कि आपने इसे साझा किया है। मैं शर्त लगाता हूं कि हम अगले वर्ष इस के उपयोग पर मूर्खतापूर्ण बदलावों का जवाब देंगे। जब हकीकत में हम इसे फिर कभी नहीं देखना चाहते हैं। –

+2

@ लोकी: एसओ पर 'स्ट्रक्चर' हैक दिखाई देने वाला यह बिल्कुल सही नहीं था। – fredoverflow

+0

@Fred http://stackoverflow.com/a/889001/34509 –

0

आप केवल कथन के लिए एक प्रकार की घोषणा कर सकते हैं। तो दूसरा कोड प्रयोग योग्य है।

0

आप (समावेशन चरण) की while स्थिति में एक चर घोषित नहीं कर सकते हैं।

for (a = 0, short b = 0; a < 10; ++a, ++b) {} 

जो न तो काम करता है।

10

for लूप के साथ कुछ भी नहीं करना है। यदि आप किसी भी लूप के बाहर int a = 0, short b = 0; लिखते हैं तो यह संकलित नहीं होता है।
तो उत्तर है: यह हमेशा एक ही कथन में विभिन्न प्रकार के दो चर घोषित करने के लिए मना किया गया है।

संपादित करें: ओह, पैडेंटिक के लिए, मुझे एहसास है कि आप एक ही प्रकार में एक मूल प्रकार और एक सूचक प्रकार घोषित कर सकते हैं, उदाहरण के लिए एक int और int सूचक, इसलिए वे अलग-अलग प्रकार होंगे, हां।
एचएम, जो मुझे सोचता है। 32 बिट वातावरण में, एक सूचक 4 बाइट्स होगा, बस एक int की तरह, ताकि आप छोटा = 0, * बी = 0 का उपयोग कर सकें; और फिर एक int करने के लिए बी कास्ट। हम्म ...

1

क्या प्रतिबंधित है एक अल्पविराम आप int a = 0, short ...

में क्या रूप में आप तो bothe चर अव्यवस्था एक ही प्रकार int i = 0, s = 0;

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

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