मेरी समझ हमेशा यह रही है कि जब मैं एक चर या पैरामीटर के रूप में आने वाले आकार के साथ स्टैक पर एक सरणी घोषित करता हूं, तो मुझे एक त्रुटि मिलनी चाहिए।परिवर्तनीय आकार के साथ सी सरणी घोषित करते समय मुझे संकलन त्रुटि क्यों नहीं मिल रही है?
हालांकि, मैंने देखा कि अगर मुझे स्पष्ट रूप से सरणी शुरू नहीं होती है तो मुझे कोई त्रुटि नहीं मिलती है (हाँ, यह ढेर पर नहीं होगा, लेकिन मैं त्रुटि की कमी के बारे में सोच रहा हूं)। उदाहरण के लिए, निम्न कोड array2 की वजह से संकलित करता है नहीं:
#define N 30
void defineArrays(int n)
{
int i,j;
int array1[N] = {};
int array2[n] = {};
for(i=0; i<N; ++i) array1[i] = 0;
for(j=0; j<n; ++j) array2[j] = 0;
}
लेकिन निम्नलिखित कोड रन संकलित करता है तथा, तब भी जब मैं मुख्य रूप से एक असली n भेजें:
#define N 30
void defineArrays(int n)
{
int i,j;
int array1[N] = {};
int array2[n];
for(i=0; i<N; ++i) array1[i] = 0;
for(j=0; j<n; ++j) array2[j] = 0;
}
मैं क्या याद आ रही है यहाँ? क्या यह एक सूचक के रूप में array2 घोषित कर रहा है? मैं जीसीसी
अद्यतन का उपयोग कर रहा हूं: उत्तर देने वाले सभी के लिए धन्यवाद। समस्या वास्तव में थी कि जीसीसी का मेरा संस्करण कुछ अजीब कारणों के लिए सी 99 में डिफ़ॉल्ट था (या बहुत अजीब नहीं, शायद मैं बहुत पुराना हूं), और मैंने गलत तरीके से माना कि यह C90 तक डिफ़ॉल्ट है जब तक कि मैं इसे अन्यथा नहीं बताता।
अरे, मुझे एहसास हुआ कि नहीं किया है जीसीसी चूक अब C99 के लिए। मैं बहुत लंबे समय तक जी ++ का उपयोग कर रहा हूं। आपके कर्सर के कारण – Uri
@Uri No +1 आपके प्रश्न पर। – Alex