printf function… C language ओळख…!

C language मध्ये printf म्हणजेच print function ची ओळख पहील्याच दिवशी होते. डेनीस रिची ला C language हि compact form मध्येच हवी होती. म्हणून जाणीवपुर्वक त्याने input/output ची सोय language च्या definition मध्ये केलेली नाही. अर्थात printf हे फंक्शन C language चा inherent part आहे अशी अनेक जणांची सुरवातीला समजूत होते हा भाग वेगळा. 

printf function हे formatted console I/O functions या category मध्ये येते. प्रथम मी या category चा अर्थ काय आहे ते सांगते. 

NAB-Ad-console

 

  1. Console : या शब्दाचे अनेक अर्थ आहेत. English मध्ये त्याचा अर्थ सांत्वंन करणे असा आहे. तर Computer मध्ये keyboard व monitor चे combination, display monitor, command line interface, computer terminal असे अनेक आहेत. C language च्या मर्यादीत अर्थ पहायचा असेल तर शक्यतो असे application ज्या वर फक्त text based output अशी स्क्रिन. यालाच console असे शक्यतो ओळखले जाते. व printf function कॉल करून प्रिंट केलेले output console ला म्हणजेच monitor ला पाठवले जाते
  2. Formatted: Console Screen वर output नेमक्या ठिकाणी हवे असेल, दोन शब्दांमध्ये अथवा दोन वाक्यांमध्ये ठरावीक अतंर ठेवायचे असेल, किंवा real number print करतांना decimal point नंतर ठरावीक digits हवे असतील अशा प्रकारचे किंवा तत्सम प्रकारचे formatted output हवे असेल तर ते printf function च्या सहाय्याने करता येते. 
  3. I/O : Input व Output या जोडगोळीचे ते संक्षीप्त स्वरूप आहे. 

हे फंक्शन Compiler च्या library मध्ये उपलब्ध असते व त्याचा प्रोटोटाइप stdio.h या header file मध्ये असतो. तो साधारणपणे

int     _Cdecl printf(const char *__format, …);

असा आहे. या prototype वरून कोणती माहीती मिळते…? तर

  • printf function चा return type integer आहे
  • _Cdecl ला printf function चे calling convention म्हणतात. 
  • printf function पहीले argument string घेते
  • printf function चे दुसऱ्या argument मध्ये तीन dots दाखवले आहेत ज्याला ellipsis असे म्हणतात ज्याचा अर्थ variable number of arguments असा आहे. म्हणजेच printf function एक पेक्षा जास्त कितीही arguments घेते.

हे फंक्शन

  • series of arguments घेते
  • जर पहील्या स्ट्रिंग मध्ये काही format specifiers असतील तर त्या प्रमाणे apply करते
  • आणी formatted data console वर print करते

printf function ची वैशिष्ठे

  • By default printf function print करतांना right hand side ला word wrap facility वापरते
  • \n हे special implementation control character आहे ज्या मध्ये control next line ला नेण्याचे काम करते
  • Screen scroll down करण्याची सुविधा सुद्धा printf function मध्ये built in आहे
  • character print केल्या नंतर cursor next position ला नेण्याचे काम सुद्धा automatically नेण्याची provision आहे
  • पहील्या format specifier ला format नंतरचे पहीले argument connect करण्याचे, दुसऱ्या format specifier ला format नंतरचे दुसरे argument connect करण्याचे व त्याच पद्धतीने पुढील format specifier apply करण्याची built in सुविधा printf function मध्ये आहे

format specifier चा typical form


% [flags] [width] [.prec] [{h|l}] type

असा आहे. 

या मध्ये अनेक प्रकारचे flags व type आहेत. पण महत्वाचे व नेहमी लागणारे मी येथे घेते. बाकीचे स्पेशल पुढील पोस्ट मध्ये. 

int x = 55;

printf(“x = %o”,x); 

असे असेल तर o हा एखादा integer number जर octal format मध्ये print करायचा असेल तर वापरतात. या ठिकाणी तुम्हाला output मात्र 

x = 67

असे येइल. पण तुम्हाला true octal representation हवे असेल तर मात्र printf function 

printf(“x = %#o”,x);

असे लिहावे लागेल, या ठिकाणी # हा flag आहे . 

समजा तुम्हाला x = 55 या स्टेटमेंट नंतर value print करतांना मात्र +55 अशी हवी असेल तर + flag वापरावा लागेल जसे की 

printf(“x = %+d”,x); 

समजा आपल्याला 55 च्या अलीकडे 4 zero हवे आहेत. तर 0 असा flag टाकावा लागेल. जसे की

printf(“x = %06d”,x); 

असे स्टेटमेंट लिहीले तर output 000055 असे मिळेल. 

print होतांना तुम्हाला width specify करायची असेल तर ती सुद्धा देउ शकता. जसे की 

printf(“x = %d”,x); असे लिहीले तर output 

x = 55 

असे मिळेल. पण समजा

printf(“x = 10d”,x);

असे लिहीले तर 10 columns जागा राखीव ठेवून मग त्या ठिकाणापासून डाव्या बाजूला printing होइल जसे कि

x =           55

असे होइल. 

समजा 

float y = 6.7;

असे स्टेटमेंट असेल तर 

printf(“y = %f”,y); 

हे स्टेट्मेंट printing करतांना 

y = 6.700000 

असे करेल. पण जर 

printf(“%0.2f”,y);

असे लिहीले तर मात्र output

y = 6.70 

असे मिळेल.   

C language मध्ये असलेल्या वेगवेगळ्या format specifiers ची माहीती मी या पुर्वीच Blog वर टाकली आहेत

 

 

 Precedence and Associativity of operators in C

C language मध्ये काही concepts असे आहेत कि ज्याचा स्वतंत्रपणे अभ्यास केला जात नाही. “प्रोग्रॅम सोडवतांना अडचण येइल त्यावेळी बघून घेउ काय करायचे ते” अशी सर्व साधारण मनोवृत्ती असते.
Operator associativity हा अशाच काही टॉपीक पैकी एक टॉपीक. आज मी या पोस्ट मध्ये Operator precedence and associativity या बद्दल सांगते.

C language is very rich in number of operators. आणी हे सर्व operators वेगवेगळ्या categories मध्ये विभागून ठेवले आहेत. म्हणजे त्याच्या broad categories

  1. Unary operators (Single operand)
  2. Binary operators (Two operands on both side of operator)
  3. Ternary operators (three operands)

अशा आहेत.

शिवाय हे सर्व

General operators
e.g. function operator ( ), Array expression [ ], Structure operator ->, Structure operator .
Unary operators
e.g. unary minus – , increment ++, decrement –, one’s complement ~, Negation !, Address of &, value at address *, type cast (type), size in bytes (sizeof)
Mathematical operators
e.g. Multiplication *, Division /, Modulus %, Addition +, Subtraction -,
Shift operators
e.g. Left shift <<, Right shift >>
Relational operators
e.g. Less than <, Less than or equal to <= , Greater than >, Greater than or equal to >=, equal to ==, Not equal to !=
Bitwise operators
e.g. BIT wise AND &, BIT wise exclusive OR ^, BIT wise inclusive OR |
Logical operators
e.g. Logical AND &&, Logical OR ||
Ternary operators
e.g. Conditional operator ? :
Assignment operators
e.g. =, *=, /=, %=, +=, -=, &=, ^=, |=, <<=, >>=
Comma operator
e.g. ,

अशा categories मध्ये विभागले गेले आहेत.

Operators in C
वरील सर्व operators हे Highest precedence पासून Lowest precedence पर्यंत लिहीले आहेत. म्हणजेच Function operator ला highest precedence आहे तर comma operator ला lowest precedence आहे.

आता precedence म्हणजे एखादे एक्सप्रेशन सोडवतांना कोणते operation प्रथम करायचे, त्या नंतर कोणते करायचे याचा जो sequence follow करायचा असतो तो… उदा.

x = 8 / 4 + 4 % 2

या expression मध्ये वरील चार्ट प्रमाणे / आणी % ला + operator पेक्षा higher precedence आहे तर = ला मात्र + पेक्षा सुद्धा कमी precedence आहे. म्हणजेच त्याच क्रमाने operations होतात. म्हणजेच
8/4 will be evaluated to 24%2 will be evaluated to 02 + 0 will be evaluated to 2 and will be assigned to x  आता समजा expression
x = 8 / 4 * 2   असे मात्र असेल तर अनेक वेळा 4 * 2 हे प्रथम सोडवून नंतर मग 8/8 हे ऑपरेशन विद्यार्थ्यांच्याकडून केले जाते. या ठिकाणी associativity consider केली जाते. म्हणजेच एकच precedence असलेले operators जर sequentially आले तर कोणत्या मार्गाने operations करायची त्याच्या संबधीत language चे rules म्हणजे associativity…!

Associativity of operators in C हि दोन प्रकारची असते
Left to Right (याला काहीवेळा Left associativity असे सुद्धा म्हणतात)Right to Left (याला काहीवेळा Right associativity असे सुद्धा म्हणतात) हि associativity operators च्या संबधीत असते. म्हणजे C च्या operator precedence table मध्ये Dennis Ritchie ने precedence बरोबर associativity सुद्धा दिली आहे. उदा. mathematical operators ला Left to Right associativity आहे तर assignment operators, unary operators आणी comma operators ला Right to Left associativity आहे.

म्हणजेच वरील expression आता associativity च्या नियमानुसार 8/4 हे प्रथम सोडवून मिळालेल्या result ला 2 ने multiply केले जाते व x मध्ये 4 store होतो.

हे सगळं वाचल की समजल असं वाटत पण ज्या वेळी precedence chart मधील अनेक operators मात्र एखाद्या expression मध्ये उलट-सुलट येतात त्यावेळी भंबेरी उडते. अनेक छोटे-छोटे प्रोग्रॅम्स डोळ्याखालून घालणे व त्याचे execution समजावून घेणे हाच एकमेव उपाय आहे. आमच्या टिम मधील काही engineers नी अशा प्रकारच्या अनेक प्रश्नांची व त्याच्या explanation ची व्यवस्था C Marathi framework मध्ये प्रत्येक चॅप्टरच्या खाली केली आहे.

For more information Register Here

Digraph and Trigraph in C – Escape Sequence Part II

समजा मी असा प्रोग्रॅम लिहीला

%:include <stdio.h>

%:ifndef BUFSIZE
 %:define BUFSIZE  512
%:endif

void copy(char d<::>, const char s<::>, int len)
<%
    while (len-- >= 0)
    <%
        d<:len:> = s<:len:>;
    %>
%>


हा प्रोग्रॅम कोणत्या लॅंग्वेज मध्ये लिहीला आहे तो तुम्हाला प्रश्न पडेल. पण C आणी C++ मध्ये असा program लिहीता येतो. व याचा जवळचा संबंध 
preprocessor directives आणी ? या escape sequence शी आहे. Register here to read more

Escape Sequence in C : Part I

क्रिकेट ची वन डे मॅच ज्यावेळी एखाद्या मैदानावर असते त्यावेळी प्रेक्षकांची तिकीट चेक करूनच मग प्रेक्षकांना आत सोडणारे  gate तुम्ही पाहीले असेल कदाचीत. अर्थातच या गेटच्या बाहेर भली मोठ्ठी रांग दिसते. अशावेळी त्याच सामन्याचा संबंधीत एखादा अधिकारी, groundsman, security person, किंवा एखाद्या खेळाडूचा नातेवाइक किंवा एखादा VIP जर असेल तर रांगेतील इतर प्रेक्षकांपेक्षा त्याला स्पेशल ट्रिटमेंट दिली जाते. खर तर तो इतर प्रेक्षकाप्रमाणेच असू शकतो पण तरीसुद्धा त्याला स्पेशल ट्रिटमेंट देणे जरूरी असते. पण ती व्यक्ती स्पेशल आहे हे ओळखणारे तिथे कोणीतरी असावे लागते अथवा त्या व्यक्तीकडे एखादे बॅच असावे लागते.

VIP in a Queue

VIP in a Queue

Register here to read more To view animated contents and details  

History of C Language

C लॅंग्वेजचा इतिहास सुद्धा खुप रंजक आहे. C लॅंग्वेज चे नाव ऐकल्या ऐकल्या आपल्याला या लॅंग्वेजला C असे नाव का दिले असावे याची उत्सुकता वाढते. तुमच्या सारख्या उत्सुक विद्यार्थी मित्र मैत्रिणींना लॅंग्वेज शोधुन काढणाऱ्यांचे अद्याक्षर आहे की काय असेही वाटेल…C असे नाव देण्यामागे थोडी रंजकता नक्कीच आहे.

CPL

१९६० च्या दशकात जगभर सर्व मान्य अशा बहुगुणी व आखुडशिंगी संगणकीय भाषा शोधण्याचे प्रयत्न चालु होते. AT&T Bell Labs येथे Common Programming Language कॉमन लोकांना समजावी म्हणुन शोधली त्याला CPL असे नाव दिले. खरं तर तीचं नाव Combined Programming Language किंवा Cambridge Programming Language असं होत. त्या पुर्वी तीच नाव Cambridge Plus London (CPL) असं होत कारण ती develop करण्यासाठी Cambridge University आणी London University नी एकत्र प्रयत्न केले होते. पण क्लिष्ट असल्यामुळे प्रतिसाद मिळाला नाही व 1970 च्या आसपास CPL लुप्त होउन गेली.

BCPL

BCPL developer

BCPL developer

पुढे Martin Richards या शास्त्रज्ञाने CPL मधील क्लिष्टपणा कमी करून 1966 मध्ये नवीन लॅंग्वेज शोधुन काढली. पण त्यासाठी CPL मध्ये काही अधिक मिळवण्यात आले होते.  म्हणुन नावामध्ये एक अद्याक्षर वाढवले. याचे नाव BCPL ठेवण्यात आले. The BCPL was clean, consistent, powerful and portable. काही प्रोग्रॅमर BCPL ला गमतीने Before C Programming Language म्हणायचे…!

B

B Language Developer

B Language Developer

काही काळ गेल्यानंतरही यातही काही त्रुटी सापडु लागल्या व काहीसा भाग प्रोग्रॅमर मंडळीना अनावश्यक वाटु लागला. Ken Thompson या उद्योगी शास्त्रज्ञाने मग 1969  मध्ये BCPL चा अनावश्यक भाग काढून टाकला व नवीन लॅंग्वेज शोधुन काढली. त्यांच्या वर BCPL या लॅंग्वेज चा पगडा होताच. पण अन्यावश्यक गोष्टी काढुन टाकल्या असा त्यांचा विश्वास होता. म्हणुन BCPL या भल्या मोठ्या नावातील CPL  या अद्याक्षरांना सोडचिठ्टी देउन नवीन लॅंग्वेजला नाव दिले B…!

C

C Language Developer

C Language Developer

इतके सर्व होउनही अजुन ही सर्व काम करणारी मंडळी समाधानी नव्हती. ज्या कंपनीत B लॅंग्वेज डेव्हलप करणारी व्यक्ती होती त्याच कंपनीत त्याचा सहकारी मित्र काम करत होता. त्याचे नाव Dennis Ritchie. त्याने त्याच्या सहकारी मित्राबरोबर B लॅन्ग्वेजवर सुद्धा काम केले होते. या महाभागाने नवीन लॅंग्वेज वर काम करायला सुरवात केली. आणि ३ वर्षे काम करून त्याने 1972 मध्ये लॅंग्वेज चा शोध सुद्धा लावला. सहकाऱ्याने B ठेवली होती या पट्ठ्याने C ठेवुन टाकली…! आणी हिच ती बहुगुणी व आखुडशिंगी संगणकीय भाषा….

Watch and Listen history of C language on http://www.cmarathionline.com/history-of-c-language/