c++ - Printf and scanf work without stdio.h, why? -
संभव डुप्लिकेट:
दोनों printf
और scanf
को stdio.h में घोषित किया गया है। लेकिन वे इसके बिना भी काम करते हैं, सिर्फ एक चेतावनी संदेश छोड़ते हैं? इसके पीछे सिद्धांत क्या है?
बिना घोषणा किए एक फ़ंक्शन कॉल करने से पैरामीटर के आधार पर एक निहित घोषणा उत्पन्न होगी आप दे और एक धारणा वापसी प्रकार int
यह संकलन अवस्था के पीछे जाने की सुविधा देता है, क्योंकि फ़ंक्शन कहीं और मौजूद हो सकता है जो कि लिंक समय तक ज्ञात नहीं है - सी में हमेशा फ़ंक्शन प्रोटोटाइप नहीं होता, इसलिए यह पिछली संगतता के लिए है। (सी ++ में, यह एक त्रुटि है, और सी 99 जीसीसी में एक चेतावनी दी गई है।)
यदि आप printf
, Scanf
, डालता है , आदि, यह कहते हैं कि यह "मानक सी लाइब्रेरी (libc, -lc)" से आता है। जीसीसी मानक सी लाइब्रेरी से निहित रूप से लिंक करता है यदि आप
-nostdlib
फ्लैग से लिंक करते हैं, तो आपको "अपरिभाषित प्रतीकों" त्रुटि मिलती है जो आप की उम्मीद कर रहे हैं।
(वास्तव में, जब मैं Libc
, मेरे जीएनयू / लिनक्स सिस्टम में _start
की अनुपस्थिति के बारे में भी शिकायत है, और मेरे ओपनबीएसडी सिस्टम में _start
, __ गार्ड
, और __ stack_smash_handler
।)
Comments
Post a Comment