C ++ मानक से अनुभाग $ 3.6.1 / 1 पढ़ता है,
एक कार्यक्रम में एक वैश्विक फ़ंक्शन शामिल होगा जिसे मुख्य कहा जाता है , जो कार्यक्रम की निर्दिष्ट शुरुआत है।
अब इस कोड पर विचार करें,
int square(int i) { return i*i; }
int user_main()
{
for ( int i = 0 ; i < 10 ; ++i )
std::cout << square(i) << endl;
return 0;
}
int main_ret= user_main();
int main()
{
return main_ret;
}
यह नमूना कोड वही करता है जो मैं इसे करने का इरादा रखता हूं, यानी पूर्णांक के वर्ग को 0 से 9 तक प्रिंट करने से पहले , इसमें प्रवेश करता हूंmain()
फ़ंक्शन जो कि प्रोग्राम का "प्रारंभ" माना जाता है।
मैंने भी इसे संकलित किया -pedantic
विकल्प के , जीसीसी 4.5.0। यह कोई त्रुटि नहीं देता, चेतावनी भी नहीं!
तो मेरा सवाल है,
क्या यह कोड वास्तव में मानक अनुरूप है?
यदि यह मानक अनुरूप है, तो क्या यह मानक अमान्य नहीं कहता है? main()
इस कार्यक्रम की शुरुआत नहीं है! user_main()
से पहले निष्पादितmain()
।
मैं समझता हूं कि वैश्विक चर को आरंभ करने के लिए main_ret
, use_main()
पहले निष्पादित होता है लेकिन यह पूरी तरह से एक अलग बात है; मुद्दा यह है कि, यह मानक से उद्धृत कथन $ 3.6.1 / 1 को अमान्य करता है, जैसा कि कार्यक्रम main()
की शुरुआत नहीं है ; यह वास्तव में इस कार्यक्रम का अंत है !
संपादित करें:
आप 'स्टार्ट' शब्द को कैसे परिभाषित करते हैं?
यह वाक्यांश "कार्यक्रम की शुरुआत" की परिभाषा को उबालता है । तो आप इसे कैसे परिभाषित करते हैं?
main()
रूप में पर्याप्त रूप से उचित है