मुझे हाल ही में एक छोटे सी परीक्षण कार्यक्रम में टाइप करना पड़ा और, इस प्रक्रिया में, मैंने गलती से उपयोग करके मुख्य फ़ंक्शन में वर्तनी की गलती vooid
की void
।
और फिर भी इसने काम किया।
इसे अपने सबसे छोटे पूर्ण संस्करण तक कम करते हुए, मैंने इसे समाप्त किया:
int main (vooid) {
return 42;
}
यह वास्तव में संकलन करता है ( gcc -Wall -o myprog myprog.c
) और, जब चलाया जाता है, तो यह 42 देता है।
यह वैध कोड कितना सही है?
यहां एक ट्रांसक्रिप्ट कट और मेरे bash
शेल से चिपकाया गया है, जो मैं दिखा रहा हूं:
pax$ cat qq.c
int main (vooid) {
return 42;
}
pax$ rm qq ; gcc -Wall -o qq qq.c ; ./qq
pax$ echo $?
42
main
से मानक दो कैनोनिकल से अन्य संभावनाओं के लिए अनुमति देता है। पोर्टेबिलिटी के लिए, आपको उन दो में से एक का उपयोग करना चाहिए लेकिन मुझे नहीं लगता कि यूबी यहां लागू होता है।
main
में 2 विहित रूपों (2.1.2.2) में से एक होना चाहिए। लेकिन आप सही @pax हैं, एक मुक्त वातावरण में, पहचानकर्ता main
किसी भी तरह से विशेष नहीं है: यदि एक फ़ंक्शन के रूप में उपयोग किया जाता है, तो यह किसी भी प्रकार का हो सकता है और किसी भी प्रकार के मापदंडों की संख्या हो सकती है।
int main (int argc, char *argv[], char *envp[]);
के अनुरूप होने की अनुमति देगा) )।
int
पैरामीटर के साथ मुख्य को परिभाषित करके , आप अपरिभाषित व्यवहार को लागू करते हैं । कुछ भी हो सकता है :)