2010-05-19 17 views
26

के साथ सरणी आकार को घोषित करना मैंने हमेशा सोचा कि सी ++ में सरणी घोषित करते समय, आकार को निरंतर पूर्णांक मान होना चाहिए।एक गैर-स्थिर चर

उदाहरण के लिए:

int MyArray[5]; // correct 

या

const int ARRAY_SIZE = 6; 
int MyArray[ARRAY_SIZE]; // correct 

लेकिन

int ArraySize = 5; 
int MyArray[ArraySize]; // incorrect 

यहाँ भी क्या The C++ Programming Language, by Bjarne Stroustrup से समझाया गया है है:

सरणी के तत्वों की संख्या, सरणीबद्ध, निरंतर अभिव्यक्ति (§C.5) होना चाहिए। यदि आपको चर सीमाओं की आवश्यकता है, तो वेक्टर (§3.7.1, §16.3) का उपयोग करें। उदाहरण के लिए:

void f(int i) { 
    int v1[i];   // error : array size not a constant expression 
    vector<int> v2(i); // ok 
} 

लेकिन मेरा बड़ा आश्चर्य करने के लिए, कोड ऊपर अपने सिस्टम पर ठीक संकलन करता है!

यहाँ मैं संकलन करने की कोशिश की है:

void f(int i) { 
    int v2[i]; 
} 

int main() 
{ 
    int i = 3; 
    int v1[i]; 
    f(5); 
} 

मैं कोई त्रुटि मिल गया है! मैं जीसीसी v4.4.0 का उपयोग कर रहा हूँ।

क्या मुझे कुछ याद आ रही है?

+17

और यही कारण है कि एक कंपाइलर के साथ कुछ परीक्षण करने से कोड शुद्धता के मामले में कुछ भी मतलब नहीं है। – GManNickG

+1

का डुप्लिकेट http://stackoverflow.com/questions/737240/c-c-array-size-at-run-time-w-o- गतिशील- आवंटन-is-allowed – nico

उत्तर

24

यह मानक के लिए एक जीसीसी विस्तार है: see here

आप जीसीसी एक चेतावनी -std=c++98 जारी करने के लिए, या कोई त्रुटि में बनाने के लिए पैदा करने के लिए -pedantic विकल्प का उपयोग कर सकते हैं, जब आप इन एक्सटेंशन से एक का उपयोग (मामले पोर्टेबिलिटी में एक चिंता का विषय है)।

6

आप सी 99 से एक सुविधा का उपयोग कर रहे हैं जिसे वीएलए (परिवर्तनीय लंबाई सरणी) कहा जाता है। यदि आप अपने प्रोग्राम को इस तरह संकलित करते हैं तो बेहतर होगा:

g++ -Wall -std=c++98 myprog.cpp