Predefined Macros in C

Macros in C   या पोस्ट मध्ये मी “__LINE__, __FILE__, __DATE__, __TIME__ हे काही predefined macros आहेत व या मॅक्रो विषयी मी एक संपुर्ण वेगळी पोस्ट लिहीते नंतर कधीतरी…” असे लिहीले होते. आठवत असेल कदाचित तुम्हाला. या पोस्ट मध्ये अशा प्रकारच्या काही मॅक्रो विषयी लिहीणार आहे. Academic level ला C चे programs लिहीतांना हे मॅक्रोज वापरले जात नसल्यामुळे अनेक वेळा शिकायचे राहून जातात. याचे कारण म्हणजे सॉफ्टवेअर डेव्हलप करतांना एकाच प्रोजेक्ट वर अनेक प्रोग्रॅमर अनेक फाइल्सवर काम करत असतात. आणी शेवटी सर्व प्रोजेक्ट कंपाइल करतांना व debug करतांना Warnings, Errors नेमक्या कोणत्या फाइल मध्ये आहेत कोणत्या लाइन नंबर ला आहेत कोणत्या वेळी कोणत्या दिवशी प्रोग्रॅम कंपाइल केला आहे याची माहीती हवी असते. या साठी हे मॅक्रो उपयोगी  येतात.

तुम्हाला हे लगेच लक्षात येइल कि हे सर्व मॅक्रोजची नावे double underscore ने सुरू होतात व संपतात.

__LINE__ हा मॅक्रो ज्यावेळी preprocessor कडून expand होतो त्यावेळी current input line number हा integer constant च्या स्वरूपात प्रिंट करतो.

समजा एक साधा प्रोग्रॅम लिहून त्या मध्ये printf(“%d\n”,__LINE__) असे स्टेटमेंट लिहीले.

01

या ठिकाणी तुम्हाला आउटपुट खालील प्रमाणे दिसेल.

02

तुम्हाला 12 हे जे output दिसते ते __LINE__ macro expand झाल्यामुळे दिसते. व हा मॅक्रो line number return करतो म्हणून %d format specifier वापरून प्रिंट केला आहे. गंम्मत म्हणजे ज्या line ला हा मॅक्रो लिहाल त्या प्रमाणे हा expand होतो. तुम्ही हवं तर हा प्रोग्रॅम लिहुन __LINE__ असलेले प्रिंट एफ स्टेटमेंट वेगवेगळ्या line ला लिहून पहा. इतकेच नाही तर तुम्ही line number तुम्हाला हवा तो सेट सुद्धा करू शकता. त्यासाठी #line हा preprocessor directive वापरता येतो. म्हणजेच समजा मी वरील प्रोग्रॅम मध्ये #line directive वापरला व 100 ला सेट केला. जसे की…

03

तर तुम्हाला __LINE__ असलेल्या प्रिंट-एफ स्टेटमेंट मुळे मिळालेले output 110 असे असेल….!

04

__FILE__ हा predefined macro सुद्धा __LINE__ प्रमाणेच वापरला जातो फरक इतकाच की हा मॅक्रो expand झाल्यानंतर string return करतो. हा macro इतका intelligent आहे कि ज्या c च्या program मध्ये हा लिहीला जातो त्या फाइल चा current path return करतो. For example समजा एक छोटा प्रोग्रॅम असा लिहीला

05

तर तुम्हाला output अशा प्रकारचे मिळेल ज्या मध्ये file चा पुर्ण path प्रिंट होइल.

एक छान प्रोग्रॅम आपण या ठिकाणी पाहू. प्रोग्रॅम असा लिहायचा आहे कि त्या प्रोग्रॅम चे output तोच सर्व प्रोग्रॅम म्हणजे अर्थातच सोर्स कोड प्रिंट झाला पाहीजे. वरकरणी हा प्रोग्रॅम खुप कठीण वाटत असला तरी File handling व आत्ताच पाहीलेल्या मॅक्रोचा उपयोग करून हा प्रोग्रॅम लिहीता येतो. बघा खाली कसा लिहीलाय तो…

07

हा प्रोग्रॅम तुम्ही लिहून कंपाइल व रन करून पाहीला तर तुम्हाला output असे मिळेल…!

08

Isn’t it real power of C language…?

या पोस्टच्या सुरवातीला सांगीतल्या प्रमाणे अनेक फाइल मध्ये divide झालेला प्रोग्रॅम असेल आणी तुम्हाला अनेक ठिकाणी pair मध्ये वापरले जातात जेणे करून कोणत्या फाइल मध्ये कोणत्या line number ला bugs असण्याची अथवा शोधण्याची गरज भासेल…

याच series मध्ये __TIME__ आणी __DATE__ हे दोन predefined macros आहेत.

__DATE__ macro ज्यावेळी expand होतो त्यावेळी preprocessor ज्या दिवशी रन होतो ती date तुम्हाला string च्या स्वरूपात देतो.  तर __TIME__ ज्या वेळी प्रोग्रॅम preprocessor run होतो ती वेळ तुम्हाला string च्या स्वरूपात देतो. म्हणजे जर तुम्ही असा प्रोग्रॅम लिहीला…

09

तर त्याचे output असे मिळेल…!

10

या पुढील पोस्ट मध्ये मी तुम्हाला इतर काही preprocessor directives मधील गमती-जमती सांगेन…

Till then Best Wishes and Happy Life…

Format Specifier %n

सर्वसामान्यपणे %d, %f, %c, %u, %s हे फॉर्मॅट स्पेसीफायर्स विद्यार्थ्यांना माहीत असतात. परंतू %n या फॉरॅट स्पेसीफायरचा उल्लेख कमी प्रमाणात आढळतो. हा फॉर्मॅट स्पेसीफायर तुलनेने गमतीशीर आहे कारण त्याचा वापर वेगळ्या पद्धतीने करावा लागतो. हा फॉर्मॅट स्क्रीन वर कीती कॅरेक्टर्स प्रिंट केली आहेत त्याची माहीती देतो. परंतू त्यासाठी printf function मध्ये जे argument लिहावे लागते ते pointer to unsigned integer या प्रकारचे गरजेचे असते. हे कळण्यासाठी मी एक छोटा प्रोग्रॅम खाली लिहीत आहे.

01

हा प्रोग्रॅम तुम्ही कंपाइल व रन केला तर तुम्हाला किती characters  प्रिंट झाली त्याचा नंबर दिसतो.

02

अर्थात सर्व कंपायलरला अशी सुविधा असेल याचा भरोसा नाही हे सुद्धा लक्षात ठेवले पाहीजे. या ठिकाणी प्रिंट-एफ फंक्शनला num चा  address पाठवला आहे.

 

Nesting of loops in C

See on Scoop.itC Programming Language

नवीन वर्षाच्या हार्दीक शुभेच्छा. ऐका गोष्ट आणी करा शेअर तुम्हाला आवडली तर…! वर्गात प्रोग्रॅमिंग शिकायचे म्हणजे अनेक विद्यार्थ्यांना कंटाळवाणे होते. पहा या व्हिडीओ मध्ये फक्त झलक… आम्ही कसे सोप्…

See on www.cmarathionline.com