मैंने a snippet of code on CodeGolf देखा जो कि एक कंपाइलर बम के रूप में है, जहां main
को एक विशाल सरणी के रूप में घोषित किया गया है।एक सरणी संकलन के रूप में मुख्य घोषित क्यों करता है?
int main[1] = { 0 };
यह और बजना के तहत ठीक संकलित करने के लिए लगता है जीसीसी के तहत केवल एक चेतावनी के साथ:
चेतावनी: मैं निम्नलिखित (गैर बम) संस्करण की कोशिश की 'मुख्य' आम तौर पर एक समारोह [है - Wmain]
परिणामस्वरूप बाइनरी, बेशक, कचरा है।
लेकिन यह बिल्कुल संकलित क्यों होता है? क्या यह सी विनिर्देशन द्वारा भी अनुमति है? अनुभाग मुझे लगता है कि प्रासंगिक है का कहना है:
5.1.2.2.1 कार्यक्रम स्टार्टअप
समारोह कार्यक्रम स्टार्टअप पर बुलाया मुख्य नाम पर है। कार्यान्वयन इस समारोह के लिए कोई प्रोटोटाइप घोषित नहीं करता है। इसे एक प्रकार के int के साथ परिभाषित किया जाएगा और बिना पैरामीटर [...] या दो पैरामीटर [...] या कुछ अन्य कार्यान्वयन-परिभाषित तरीके से परिभाषित किया जाएगा।
क्या "कुछ अन्य कार्यान्वयन-परिभाषित तरीके" में वैश्विक सरणी शामिल है? (मुझे ऐसा लगता है कि कल्पना अभी भी एक समारोह को दर्शाता है।)
यदि नहीं, तो यह एक संकलक विस्तार है? या टूलचेन की एक विशेषता, जो किसी अन्य उद्देश्य की सेवा करती है और उन्होंने इसे फ्रंटेंड के माध्यम से उपलब्ध कराने का फैसला किया?
यह ** संकलित नहीं करता है। आईएसओ सी शून्य आकार के सरणी मना करता है। – Jens
सी विनिर्देशन द्वारा इसकी अनुमति नहीं है। कंपाइलर्स अक्सर सामान को लागू करते हैं जो विनिर्देशन से ढके नहीं होते हैं। –
संबंधित प्रश्न: [एक वैश्विक चर के साथ एक प्रोग्राम मुख्य समारोह के बजाय मुख्य कहलाता है?] (Http://stackoverflow.com/q/32851184/1708801)। मुझे लगता है कि एक कोडगोल्फ सवाल से भी प्रेरित है। –