Wednesday 14 August 2013

சி மொழி தமிழில் C Programming in Tamil

 சி-மொழி வரலாறு


சி-மொழியைப் படைத்த கணிப்பொறி வல்லுநர், டென்னிஸ் எம்.ரிட்சி (Dennis M. Ritchie) என்பது அனைவரும் அறிந்த ஒன்று. ஆனால், சி-மொழி உருவான வரலாறு உங்களுக்குத் தெரியுமா? அதன் வரலாற்றையும் சிறப்பையும் அறிந்து கொண்டாலே அந்த மொழியைக் கற்க வேண்டும் என்னும் ஆசை தானாக வரும். சி-மொழியின் நுணுக்கங்களைக் கற்றறிவதற்கு முன்பாக அது தோன்றி வளர்ந்த வரலாற்றைச் சற்றே புரட்டிப் பார்ப்போம

Programming in Tamil 


 சி-மொழிக்கு முன்னால்
1950-1960: உயர்நிலைக் கணிப்பொறி மொழிகள் (High Level Languages) பல புதியதாக உருவாகி உலா வந்த காலம் அது. உயர்நிலை மொழிகளின் உதவியுடன் மனிதன் கணிப்பொறியுடன் எளிதாக உரையாட முடிந்தது. ஆனால் அக்காலத்தில் உருவான கணிப்பொறி மொழிகள் எல்லாம் ஒரு குறிப்பிட்ட வகையான பணிகளைச் செய்து முடிப்பதற்காகவே உருவாக்கப்பட்டவையாக இருந்தன.
பொறியியல் மற்றும் அறிவியல் பணிகளுக்கென ஃபோர்ட்ரான் (FORTRAN - FORmula TRANslation) உருவாக்கப்பட்டதும், வணிகத் துறையின் பயன்பாடுகளுக்காகக் கோபால் (COBOL - COmmon Business Oriented Language) மொழி உருவாக்கப்பட்டதும் நாம் அறிந்தவை. இப்படி ஒவ்வொரு பணிக்கும் ஒவ்வொரு மொழி இருந்த காலகட்டத்தில், எல்லாப் பணிகளுக்காகவும் ஒரு பொதுவான மொழி உருவாக்கப்பட்டால் என்ன? என்ற ஏக்கம் கணிப்பொறித் துறை வல்லுநர்கள் அனைவருக்கும் இருந்தது.
இந்தக் குறையை நீக்கப் பல நாடுகளின் வல்லுநர்களைக் கொண்ட ஒரு கமிட்டி அமைக்கப்பட்டது. அவர்கள், பெருமுயற்சிக்குப் பின் 1960-ல் ‘அல்கால்’ (ALGOL - ALGOrithmic Language) மொழியை உருவாக்கினர். அம்மொழி எதிர்பார்த்த பயனைத் தரவில்லை. மிகவும் அருவமாகவும் (too abstract), மிகப் பொதுப்படையாகவும் (too general) இருந்தது. மிகக் குறைவான நிரல் குறியீடுகள் உடையதாகவும், புரிவதற்குக் கடினமான நிரல் வரைவு கொண்டதாயும் விளங்கியது.
கணிப்பொறித் துறை வல்லுநர்களின் ஆய்வு தொடர்ந்தது. அல்கால் மொழியின் குறைகளை நீக்கி, 1963-ல் சிபீஎல் (CPL - Combined Programming Language) என்ற புதிய மொழியை உருவாக்கினர். அல்கால் அந்த விளிம்பில் என்றால், சிபீஎல் இந்த விளிம்பில் நின்றது. அதாவது சிபீஎல்லில் மிக அதிகமான புரோகிராம் குறியீடுகள், வளவளா என்று மிக விரிவான சடங்கு முறைகள் இருந்தன. கற்பதற்கும், பயன்படுத்துவதற்கும் மிகக் கடினமான ஒரு மொழியாக இருந்தது.
ஆனால், சிபீஎல் பல நல்ல கூறுகளை உள்ளடக்கியதாகவும் விளங்கியது. அதை ஓரளவு சுருக்கி, அதன் நல்ல தன்மைகளை வெளிக்கொணர பலர் முயன்றனர். அவர்களுள் ஒருவரான, இங்கிலாந்தில் கேம்பிரிட்ஜ் பல்கலைக் கழகத்தில் பணிபுரிந்து கொண்டிருந்த மார்ட்டின் ரிச்சர்ட்ஸ் (Martin Richards), பிசிபீஎல் (BCPL- Basic Combined Programming Language) என்னும் புதிய மொழியை 1967-ல் உருவாக்கி வெளியிட்டார். சிபீஎல்-லின் நல்ல தன்மைகளை அது உள்ளடக்கியதாக இருந்தது என்றாலும், சிபீஎல் அளவுக்குச் சக்தி வாய்ந்ததாக இல்லை. மேலும், ‘அனைத்துப் பணிகளுக்கான பொதுப்படையான மொழி’ ஒன்றை உருவாக்குவது என்ற அடிப்படை நோக்கத்திற்குப் பங்கம் விளைவிப்பதாகவும் அது ஆகிவிட்டது. அதாவது, சில குறிப்பிட்ட வகைப் பணிகளுக்கு மட்டுமே பயன்படக்கூடியதாய் அம்மொழி அமைந்திருந்தது.
 சி-மொழியின் பிறப்பு
வரலாற்றின் நிகழ்ச்சிகள் ஒருபுறம் இவ்வாறு நடந்து கொண்டிருக்க, அமெரிக்கத் தொலைதொடர்பு மற்றும் கணிப்பொறித் துறையின் முன்னணி நிறுவனமான ஏடீ & டீ (AT & T) நிறுவனத்துக்குச் சொந்தமான பெல் (Bell) ஆய்வுக் கூடத்தில் கென் தாம்சனும் (Ken Thompson) டென்னிஸ் ரிட்சியும், அக்காலத்தில் பயன்பாட்டில் இருந்த ’மல்டிக்ஸ்’ (MULTICS) என்னும் பல்பயனர் இயக்கமுறைமைக்கு (Multiuser Operating System) மாற்றாக ஒரு புதிய இயக்க முறைமையை உருவாக்கிக் கொண்டிருந்தனர். தாங்கள் உருவாக்கிய புதிய இயக்கமுறைமையை, மூலையில் கிடத்தி வைக்கப்பட்டிருந்த டெக் பீடிபீ-7 (DEC PDP - 7) என்ற குறுங் கணிப்பொறியில் (Mini Computer) நடைமுறைப்படுத்தினர். பிறகு சற்றே திறன் கூடுதலான டெக் பீடிபீ-11 என்ற கம்ப்யூட்டரில் அந்த இயக்கமுறைமையை வெற்றிகரமாக இயக்கினர். மல்டிக்ஸைக் காட்டிலும் பல்வகையிலும் மேம்பட்டிருந்த தங்களின் இயக்க முறைமைக்கு எதிர்மறையாக ‘யூனிக்ஸ்’ (UNIX) என்று பெயரிட்டனர். அது இன்றளவும் செல்வாக்குப் பெற்றுத் திகழ்வதை நாம் அறிவோம்.
இந்தப் பணியில் மூழ்கியிருக்கும்போதே கென் தாம்சன், தனியாக ஒரு முயற்சியில் ஈடுபட்டிருந்தார். பீடிபீ-11 கணிப்பொறியில் யூனிக்ஸ் இயக்க முறைமையில் செயல்படுத்த, ஃபோர்ட்ரான் மொழிக்கான ஒரு ‘நிரல்பெயர்ப்பியை’ (Compiler) உருவாக்கிக் கொண்டிருந்தார். ஃபோர்ட்ரான் மொழிக்குக் கம்ப்பைலரை எழுதும்போது பக்க விளைவாக ஒரு புதிய கணிப்பொறி மொழி உருவானது. தாம்சன், கம்ப்பைலர் வேலையைப் பாதியிலேயே மறந்துவிட்டு, யூனிக்ஸ் இயக்க முறைமையில் இயங்கும் அந்தப் புதிய மொழியை வளர்த்தெடுத்தார். இது 1971-ல் நடந்தது.
பிசிபீஎல் (BCPL) மொழிதான் கென் தாம்சனுக்கு முன் மாதிரியாய் இருந்தது. பிசிபீஎல்-லின் பல நல்ல கூறுகளை தாம்சன் மொழி உள்ளடக்கியதாக இருந்தது. ஒரு வகையில் அதன் வாரிசாகவும் திகழ்ந்தது என்றுகூடச் சொல்லலாம். எனவே தாம்சன் தன் மொழிக்கு `பி’ (B) என்று பெயரிட்டார். `பி’ என்பது பிசிபீஎல் (BCPL) என்ற பெயரின் முதல் எழுத்தாகும்.
பி-மொழியிலும் சில பின்னடைவுகள் இருந்தன. முதலாவதாக, பி-மொழி, ’ஆணைபெயர்ப்பி’ (Interpreter) சார்ந்த மொழியாக இருந்தது. இரண்டாவதாக, பிசிபீஎல் மொழியைப் போன்றே மிகக் குறுகிய, குறிப்பிட்ட பணிகளுக்கே உதவும் மொழியாக இருந்தது.
இந்த நேரத்தில்தான், டென்னிஸ் ரிட்சி, வரலாற்றுச் சிறப்புமிக்க அச்சாதனையைச் செய்தார். பி-மொழியைச் செழுமைப்படுத்தி, தன் மேதமையின் சாரத்தைப் பிழிந்து அதில் கலந்து, கம்ப்பைலர் சார்ந்த ஒரு புதிய மொழியை உருவாக்கினார். பிசிபீஎல் மொழியிலும், பி-மொழியிலும் காணாமல் போயிருந்த பொதுத்தன்மையைத் தன் மொழியில் மீட்டுத் தந்தார். குறிப்பிட்ட பணிகளுக்கு மட்டும் அல்லாமல் எல்லாப் பணிகளுக்கும் பயன்படும் பொதுமொழியாக அது திகழ்ந்தது. கணிப்பொறி மொழி வல்லுநர்கள் 1960-ல் கண்ட கனவைக் கடைசியாக 1972-இல் ரிட்சி நிறைவேற்றி வைத்தார்.
ரிட்சி, தன் மொழிக்கு `சி’(C) என்று பெயரிட்டார். B என்ற ஆங்கில எழுத்துக்கு அடுத்த எழுத்து C என்பதால்தான் ரிட்சி அவ்வாறு பெயரிட்டதாக பலரும் கருதினர். ஆனால் அந்த ஒற்றுமை, தற்செயல் நிகழ்ச்சி என்று கூறுவாரும் உண்டு. உண்மையில் `சி’ என்பது பிசிபீல் (BCPL) மொழியில் உள்ள இரண்டாவது எழுத்தைத்தான் குறிக்கிறது என்பது அவர்கள் கருத்து. ஆக, தாம்சன் தன் மொழி பி-க்கு பிசிபீஎல்-லின் முதல் எழுத்தைச் சூட்டியதுபோல, ரிட்சி தன் மொழிக்கு இரண்டாவது எழுத்தைச் சூட்டினார் என்ற கருத்தும் ஒத்துக் கொள்ளக்கூடியதே.
1973-ஆம் ஆண்டில், டென்னிஸ் ரிட்சியும் கென் தாம்சனும் தாங்கள் ஏற்கெனவே உருவாக்கிய ‘யூனிக்ஸ்’ இயக்க முறைமையின் புதிய பதிப்பை, முழுக்கவும் சி-மொழியில் எழுதினர். சி-மொழியின் செயல்திறனுக்கு, யூனிக்ஸ் ஓர் எடுத்துக்காட்டாகத் திகழ்ந்தது.
 சி-மொழியின் வளர்ச்சி
உயர்தனிச் செம்மொழியாய் சி-மொழி திகழ்ந்தபோதும் கணிப்பொறி நிரலர்களைப் (Computer Programmers) பெருமளவில் அது கவரவில்லை. அடுத்த ஆறு ஆண்டுகள் சி-மொழி பதுங்கிய புலியாகத்தான் இருந்தது எனலாம். பயன்படுத்திய சிலரும் தத்தம் விருப்பத்திற்கிணங்க சி-மொழியை வடிவமைத்துப் பயன்படுத்தி வந்தனர். ஒரு தரப்படுத்தப்பட்ட சி-மொழியை (Standard C) வரையறுக்கும்படி, அமெரிக்கன் நேஷனல் ஸ்டாண்டர்டு இன்ஸ்டிடியூட் (ANSI) கேட்டுக் கொண்டதற்கிணங்க, 1978-ல் டென்னிஸ் ரிட்சியும், பிரியன் கெர்னிகனும் இணைந்து `தி சி புரோகிராமிங் லாங்குவேஜ்’ (The C - Programming Language) என்ற நூலை வெளியிட்டனர்.
இன்று, சி-மொழி பற்றிய புத்தகங்கள் பலவும் கே & ஆர் (K & R) என்று மேற்கோள் காட்டுவது இந்தப் புத்தகத்தைத்தான். கே & ஆரின் புத்தகம் வெளியானதுமே கணிப்பொறி உலகில் ஒரு புரட்சியே நிகழ்ந்தது எனலாம். சி-மொழி, மென்பொருள் துறையை ஒரு கலக்கு கலக்கியது. இந்தக் கால கட்டத்தில்தான் வன்பொருள் துறையில் ஒரு புரட்சி நடந்தது. ஐபிஎம் (IBM) நிறுவனத்தினரின் சொந்தக் கணிப்பொறிகள் (Personal Computers - PCs) புற்றீசல் போல உற்பத்தியாகி உலா வந்தன.
பெரும் எண்ணிக்கையிலான பீசிக்களின் உற்பத்தி, சி-மொழியின் செல்வாக்குக்கு அடித்தளமாய் அமைந்தது. யூனிக்ஸ் பணித்தளச் சூழலில் பிறந்தபோதும், தன் பிறந்தகமான யூனிக்ஸின் பிடியிலிருந்து விடுவித்துக் கொண்டு, சி-மொழி சென்ற இடமெல்லாம் வெற்றிக்கொடி நாட்டியது. சி-மொழியின் செல்வாக்குப் பெருகியதும் சி-மொழியின் உருவாக்கத்தில் பங்கு பெறாத நிறுவனங்கள்கூட சி-மொழிக் கம்ப்பைலர்களை உருவாக்கி வெளியிடத் தொடங்கின. அவை தமக்கே உரிய தனித் தன்மைகளைக் கொண்டிருந்தன. மூல சி-மொழியிலிருந்து பல்வேறு மாற்றங்களையும் திருத்தங்களையும் கொண்டு விளங்கின. இதன் காரணமாய், சி-மொழிக்குக் காலத்திற்கேற்ற வடிவமைப்பும் ஒரு கறாரான வரையறுப்பும் தேவை என்பதை சி-மொழி அறிஞர்கள் உணர்ந்தனர். 1983-ஆம் ஆண்டு, அமெரிக்க தேசியத் தரக் கட்டுப்பாட்டு நிறுவனம் (ANSI) ஒரு குழுவை அமைத்தது. சி-மொழியின் பொலிவு குன்றாமல், திரிபில்லாத, ஒரு நவீன, கட்டுருவான, பொறிசாரா வரையறுப்பை (machine-independent definition) உருவாக்குவதே அக்குழுவின் நோக்கமாய் இருந்தது. ஐந்தாண்டு ஆய்வுகளுக்குப்பின் ‘அன்சி-சி’ (ANSI-C) உருவானது. டென்னிஸ் எம். ரிட்சியும், பிரியன் டபிள்யூ. கெர்னிகனும் இணைந்து, ‘தி சி புரோகிராமிங் லாங்குவேஜ்’ என்ற நூலின் இரண்டாம் பதிப்பை 1988-இல் வெளியிட்டனர்.
 அன்சி-சி
அன்சி-சி சில மாற்றங்களைக் கொண்டிருந்தது. செயல்கூறுகளை (Functions) அறிவிப்பதிலும் வரையறுப்பதிலும் புதிய வடிவம் புகுத்தப்பட்டது. செயல்கூறின் தலைப்பியிலேயே (Function Header) செயலுருபுகளின் (arguments) தரவினத்தையும் (data type) குறிப்பிட முடியும். ’ஸ்ட்ரக்ட்’ (struct) தரவின மாறியில் (variable) மதிப்பிருத்தலும், ’ஈனம்’ (enum) தரவின வகையும் சி-மொழியின் உள்ளிணைந்த அங்கமாயின. மிதவைப் புள்ளிக் (floating point) கணக்கீடுகள் ஒற்றைத் துல்லிய (single precision) முறையில் செய்யப்பட்டன. ‘அன்சைன்டு’ (unsigned) இனங்களின் கணக்கீடுகள் தெளிவுபடுத்தப்பட்டன. செயலாக்கிக்கு முந்தைய (pre-processor) நெறிப்பாடுகள் விரிவுபடுத்தப்பட்டன. விரிவான சி-மொழி நூலகம் (C Library) உள்ளிணைக்கப்பட்டது. இயக்க முறைமையை அணுகுவது, குறிப்பாக கோப்புகளில் எழுதுவது/படிப்பது (write/read in files), வடிவமைக்கப்பட்ட உள்ளீடு/வெளியீடு (formatted input/output), நினைவக ஒதுக்கீடு (memory allocation), சரங்களைக் கையாளுதல் (string handling) போன்ற பணிகளுக்கு, ஏராளமான செயல்கூறுகள் உருவாக்கப்பட்டு, நூலக/தலைப்பிக் கோப்புகளாக (library/header files) இணைக்கப்பட்டன.
சி-மொழி நூலகத்தின் பெரும்பகுதி, யூனிக்ஸ் இயக்க முறைமையின் ‘ஸ்டாண்டர்டு ஐ/ஓ லைப்ரரியின்’ மாதிரியில் வடிவமைக்கப்பட்டது. இயக்க முறைமை தொடர்பான செயல்பாடுகள் தவிர, பிற நூலகச் செயல்கூறுகளை சி-மொழியிலேயே உருவாக்க முடியும் என்பதே இதன் சிறப்புக்கூறாகும். மூல சி-மொழியில் இன்டிஜருக்கும் பாயின்டருக்கும் அதிக வேறுபாடு இல்லாமல் இருந்தது. இரண்டையும் எளிதாக மாறுகொள்ள (Interchange) முடியும். ஆனால் அன்சி-சி-யில் இது நீக்கப்பட்டது. சுட்டுகளை முறைப்படி அறிவிக்கும் முறையும், இன்டிஜர் - பாயின்டர் இனமாற்றமும் (type conversion) வெளிப்படையாக செய்யப்பட வேண்டும் என்ற கட்டுப்பாடும் புகுத்தப்பட்டது.
சி-மொழி, ஆழமான இன உணர்வு கொண்ட (strongly typed) மொழி அல்ல என்றபோதிலும், இனச் சரிபார்ப்பு (type checking) வலுப்படுத்தப்பட்டது. ஒத்தியல்பில்லா தரவினங்களுக்கிடையே (incombatible data types) தானாக நடைபெறும் இனமாற்றங்கள் (automatic type conversions) தவிர்க்கப்பட்டன. பெரும்பாலான இனப் பிழைகளை (type errors) கம்ப்பைலர் சுட்டிக் காட்டும். 1988-ல் புதுவடிவம் பெற்ற சி-மொழி, தன் பயணத்தில் தளர்வேதும் இன்றி வெற்றி நடைபோட்டு வருகிறது. காலத்திற்கேற்ற பல புதிய மொழிகள் உருவாக்கப்படுவதற்கு ஊற்றுக் கண்ணாகவும் திகழ்கிறது.
 சி++ மொழியின் உதயம்
ஏடீ & டீ பெல் ஆய்வுக் கூடத்தில் பணியாற்றிவந்த ஜேன் ஸ்ட்ரௌஸ்ட்ரப் (Bjarne Stroustrup) ரிட்சியின் நண்பர் ஆவார். 1980-ல் அவர், தான் செய்துவந்த நிகழ்வு அடிப்படையிலான பாவனைத் திட்டப்பணிக்கு (event based simulation project) ‘சிமுலா67’ (SIMULA67) மொழியைப் பயன்படுத்தினார். அம்மொழி திறன் குறைந்ததாக இருக்கவே, தன் பணியை சி-மொழியில் தொடர்ந்தார். ஆனால், அவரது திட்டப்பணிக்கு மிகவும் தேவையான வசதிகள் சி-மொழியில் இல்லாததை உணர்ந்தார். எனவே சி-மொழியில் சில புதிய வசதிகளைச் சேர்த்தார். சி-மொழியின் சுட்டுக்குச் (pointer) சற்று எளிமையான ’சுட்டுருபு’ (reference) என்னும் மாற்றைக் கண்டுபிடித்தார். இனக்குழு (class) என்னும் திறனுள்ள கருத்துருவைச் சேர்த்தார். பொருள்நோக்கு நிரலாக்கம் (Object Oriented Programming - OOP) என்ற கருத்துருவுக்குப் புதிய பாதை போட்டுத் தந்தார்.
ஸ்ட்ரௌஸ்ட்ரப் உருவாக்கிய சி-மொழி ஒரு புதிய மொழியாகப் பரிணமித்த போதும், அவர் தன் மொழியைத் தனி மொழியாகக் கருதவில்லை. சி-மொழியின் மேம்படுத்தப்பட்ட வடிவம் என்றே கருதினார். எனவே, தன் மொழிக்கு ‘இனக்குழுவுடன் கூடிய சி’ (C with Classes) என்றுதான் பெயர் சூட்டினார். மற்றவர்கள், ‘சி-யை உள்ளடக்கிய மொழி’ (Supper Set of C) என்றும், ‘சிறந்த சி’ (Better C) என்றும் பல பெயர்களில் அழைத்தனர். புதிய மொழி உருவாக்கப்பட்டு ஏறத்தாழ நான்காண்டுகள் கழித்து, 1983-ல் ரிக் மாஸ்சிட்டி என்பவர்தான் ஸ்ட்ரௌஸ்ட்ரப்பின் மொழிக்கு ‘சி++’ என்று பெயர் சூட்டினார்.
சி-மொழியில் எழுதப்பட்ட அனைத்து நிரல்களையும் மாற்றமின்றி அப்படியே சி++ மொழியில் செயல்படுத்த முடியும். எனவேதான் சி++ மொழியைத் தனி மொழியாக ஸ்ட்ரௌஸ்ட்ரப் கருதவில்லை. ++ என்பது சி-மொழியில் மாறியின் மதிப்பில் ஒன்றுகூட்டும் செயற்குறி (Operator) ஆகும். சி-மொழி செயற்குறியின் பொருளை உள்ளடக்கி, ‘மேம்படுத்தப்பட்ட சி-மொழி’ என்று பொருள்தொனிக்கும் வகையில் ‘சி++’ எனப் பெயரிடப்பட்டது. முற்றிலும் புதிய மொழி அல்ல என்பதால் பி, சி-க்கு அடுத்து டி (D) எனப் பெயர்சூட்டப்படவில்லை. எனவேதான் சி-மொழி வரலாற்றில் சி++ மொழியின் தோற்றத்தையும் தெரிந்து கொள்ள வேண்டியுள்ளது.
சி-மொழியைப் போலவே சி++ மொழியும் இன்றைக்குத் தனிச்சிறப்போடு விளங்குகிறது. சி-மொழியின் சிறப்புத் தன்மையே சி++ மொழியின் சிறப்புத் தன்மைக்கும் அடிப்படைக் காரணம் எனில் மிகையாகாது.
 ஜாவா மொழியின் உதயம்
மின்னணுக் கருவிகளின் உட்பொதி மென்பொருளுக்கான (embeded software) ஆய்வு, ‘ஜாவா’ என்னும் புதிய மொழியின் உதயத்தில் முடிந்தது. சி++ மொழியின் சிக்கலான கருத்துருக்களைக் களைந்து, இணையப் பயன்பாடுகளை (Internet Applications) உருவாக்குவதற்கென்றே, ஒரு முழுமையான எளிய பொருள்நோக்கு நிரலாக்க மொழியாக ஜாவாவை ஜேம்ஸ் காஸ்லிங்கும் அவரது நண்பர்களும் சேர்ந்து உருவாக்கினர். பல வகையிலும் ஜாவா, ஒரு புதிய மொழி என்றபோதிலும் அதன் கட்டளை அமைப்புகள் அப்படியே சி- மொழியிலிருந்து எடுக்கப்பட்டவை ஆகும்.
மாறிக் கோவைகள் (expressions), if...else நிபந்தனைக் கூற்று (conditional statement), switch என்னும் கிளைபிரி கட்டளை (branching command) மற்றும் சக்தி வாய்ந்த for(), while(), do... while() ஆகிய கட்டுப்பாட்டு மடக்கிகள் (control loops) அனைத்தும் அப்படியே சி-மொழியிலிருந்து எடுத்துக் கொள்ளப்பட்டவை. தரவினங்கள் (data types), செயற்குறிகள் (operators), செயல்கூறு வரையறுப்புகள் (function definitions) ஆகியவையும் பெருமளவு சி-மொழியை ஒத்தவை. குறிப்பிடத்தக்க செய்தி என்னவெனில் முதன்முதல் ஜாவா கம்ப்பைலரும், ஜாவா இன்டர்பிரட்டரும் சி-மொழியில் உருவாக்கப்பட்டவை. ஜாவா மொழி, சி-மொழிக்குப் பெருமளவு கடமைப்பட்டுள்ளது எனில் மிகையாகாது.
 இன்றைய மொழி சி#
மைக்ரோசாஃப்டின் புதிய படைப்பான சி# மொழி, சி மற்றும் சி++ மொழிகளின் அப்பட்டமான வாரிசாகும். சி# மொழியை உருவாக்கியவர்கள், அதனை சி, சி++ மொழிகளின் இயல்பான பரிணாம வளர்ச்சி என்றே கூறுகின்றனர். சி# மொழி ஜாவாவுக்குப் போட்டியாக உருவாக்கப்பட்ட மொழி என்றபோதிலும், சி, சி++ ஆகிய மொழிகளின் பாரம்பரியப் பெருமைகளை விட்டுக் கொடுக்காமல் அப்படியே தக்கவைத்துக் கொண்டுள்ளனர்.
அடிப்படைத் தரவினங்கள் மற்றும் கட்டளை அமைப்புகளை சி-மொழியிலிருந்து தருவித்துள்ளனர். ஜாவாவைப் போலப் பாயின்டர்களை முற்றிலும் துறந்து விடாமல், ’பாதுகாப்பற்ற குறிமுறை’ (unsafe code) என்ற பெயரில் சி# மொழியில் பாயின்டர்களை அப்படியே எடுத்தாள வழி செய்துள்ளனர். சி-மொழியின் வேகமும், திறனும் ஜாவாவைவிட சி# மொழியில் அதிகமாகவே உள்வாங்கப்பட்டுள்ளது என்றுதான் கூறவேண்டும். மைக்ரோசாஃப்ட் தன்னுடைய புதிய மொழிக்குப் பெயர் சூட்டும்போது, சி-மொழியின் பாரம்பரியத்தை நினைவுகூறும் வகையில் கவனமாக ‘சி#’ எனப் பெயரிட்டது. சி, சி# ஆகியவை இசைப்பலகையில் (Music Keyboard) சுரங்களைக் (Notes) குறிக்கும் குறியீடுகளாகும்.. சி வெள்ளைக் கட்டையிலும், சி# அடுத்துள்ள கருப்புக் கட்டையிலும் அமையும். சி-யைவிட, சி# சற்றே கூர்மையாய் ஒலிக்கும். எனவே, சி-யின் வழிவந்த புதுயுக மொழிக்கு சி# எனப் பெயரிட்டது பொருத்தமே.


பாடம்-2
சி-மொழியின் சிறப்புகள்
திருக்குறளைப் பற்றித் தெரியாதவர் ஒரு தமிழறிஞராய் இருக்க முடியாது. அதுபோல சி-மொழியை அறியாதவர் ஒரு கணிப்பொறி நிரலராய் இருக்க முடியாது. ஆயிரம் மொழிகள் வந்து போனாலும் அன்றுமுதல் இன்றுவரை சிறப்புக் குன்றாமல் செல்வாக்குப் பெற்று விளங்குவது சி-மொழி ஆகும். புரோகிராமராக வேலைவாய்ப்புத் தேடிச் செல்வோரின் தகுதிக்குச் சான்றாக அவரின் சி-மொழி அறிவை ஏற்றுக் கொள்கின்றனர். ‘கற்றவர்க்குச் சென்ற இடமெல்லாம் சிறப்பு’ என்பதை மறுப்பவர் எவருமில்லை. ஆம்! சி-மொழியைக் கற்றவர்க்குச் சென்ற இடமெல்லாம் சிறப்புக் கிட்டும் என்பதில் ஐயம் எதுவுமில்லை. சி-மொழியில் நன்கு புலமை பெற்ற ஒருவரால் வேறெந்த மொழியிலும் எளிதாகப் புலமை பெற்றுவிட முடியும் என்பது அனைவரும் ஒப்புக் கொள்ளும் உண்மையாகும். அறிவுடையார் எல்லாம் உடையார் என்பது ஆன்றோர் மொழி. சி-மொழி அறிவுடையார் எல்லாம் உடையார் என்பது அனுபவ மொழி. எனவேதான் மாணவர்கள் மட்டுமல்ல, கணிப்பொறித் துறையில் கால்பதிக்க நினைக்கும் அனைவரும் சி-மொழியை விரும்பிக் கற்கின்றனர்.
சி-மொழி, சக காலத்தில் பயன்பாட்டிலிருந்த மொழிகளோடு ஒப்பிடுகையில், பல்வேறு வகையில் மேம்பட்டுத் திகழ்கிறது. சி-மொழியின் சிறப்புத் தன்மைகளை கீழ்க்காணுமாறு பட்டியலிடலாம்:
 (1) இடைநிலை மொழி (Middle Level Language)
உயர்நிலை மொழிகள் (High Level Languages) மனிதனுக்கு நெருக்கமானவை. எனவே, நிரல் (Program) எழுதுவது எளிது. ஆனால் அவை கணிப்பொறிக்கு அந்நியமானவை. எனவே, நிரல் செயல்படும் திறன், வேகம் குறைவு. ஆனால் அடிநிலை மொழிகள் (Low Level Languages - Machine Language & Assembly Language) எந்திரத்துக்கு மிகவும் நெருக்கமானவை. திறனுடன் வேகமாகச் செயல்படுபவை. ஆனால் அவை மனிதனுக்கு அந்நியமானவை. இவற்றில் நிரல் எழுதுவது கடினமான வேலை. ஆனால், சி-மொழியோ இந்த இருவகை மொழிகளின் சிறப்புக் கூறுகளையும் தன்னகத்தே கொண்டது. மனிதனுக்கும் நெருக்கமானது, கணிப்பொறிக்கும் நெருக்கமானது. சி-மொழியின் அமைப்பு இருவருக்குமே எளிதில் புரியக் கூடியது. நிரல் எழுதுவதும் எளிது. நிறைவேற்றப்படும் திறனும் விரைவானது. எனவேதான், சி-மொழியைப் பலரும் இடைநிலை மொழி (Middle Level Language) என்றே அழைக்கின்றனர். ‘இடைநிலை மொழி’ என்று சிறப்புப் பெற்ற ஒரே மொழி சி-மொழி என்பது குறிப்பிடத் தக்கது.
 (2) இயக்க முறைமையை உருவாக்கும் வல்லமை
முதன்முதலில் யூனிக்ஸ் சூழலில் சி-மொழி உருவானபோதும், இன்றைக்கு நாம் பயன்படுத்திக் கொண்டிருக்கும் யூனிக்ஸ் என்ற மாபெரும் இயக்க முறைமையின் ஆணைத் திரள் முழுமையும் சி-மொழியில் எழுதப்பட்டதாகும். 13 ஆயிரம் வரிகள் கொண்ட யூனிக்ஸ் இயக்க முறைமையின் ஆணைத் திரளில் 12 ஆயிரத்து 200 வரிகள் சி-மொழியில் எழுதப்பட்டவை. இயக்க முறைமையின் அடிப்படையில்தான் மொழிகள் உருவாக்கப்படுகின்றன. ஆனால், இயக்க முறைமையையே உருவாக்கும் வல்லமை சி-மொழிக்கு உண்டு. விண்டோஸ் மற்றும் விண்டோஸ் என்டீ இயக்க முறைமைகளின் பெரும்பகுதி சி-மொழியில் எழுதப்பட்டவை. இன்றைக்குப் பெருமளவு பேசப்படுகின்ற லினக்ஸ் (Linux) இயக்க முறைமை முழுக்க முழுக்க (100%) சி-மொழியில் எழுதப்பட்டுள்ளது குறிப்பிடத் தக்கது.
 (3) பயன்பாட்டுத் தொகுப்புகளை உருவாக்கும் திறன்
பெரும்பாலும், பயன்பாட்டுத் தொகுப்புகளை (Application Packages) அசெம்பிளி மொழியில் எழுதிக் கொண்டிருந்தனர். இன்று, சி-மொழியைப் பயன்படுத்தி தரவுத்தளம் (Database), சொல் செயலாக்கி (Word Processor), விரிதாள் (Spreadsheet) போன்ற தொகுப்புகள் எழுதப்படுகின்றன. டி’பேஸ், வேர்டுஸ்டார், லோட்டஸ் போன்ற பல்வேறு பயன்பாட்டுத் தொகுப்புகள் சி-மொழியில் உருவாக்கப்பட்டவை.
 (4) நிரல்பெயர்ப்பிகளை உருவாக்கும் திறன்
ஓர் உயர்நிலைக் கணிப்பொறி மொழியில் எழுதப்பட்ட நிரலை கணிப்பொறிக்குப் புரிகின்ற மொழியில் மொழிபெயர்த்துச் சொல்லும் மொழிபெயர்ப்பு மென்பொருளைக் ’கம்ப்பைலர்’ என்கிறோம். தமிழில் ‘நிரல்பெயர்ப்பி’ எனப்படுகிறது. ஓர் உயர்நிலை மொழிக்கான கம்ப்பைலர் அந்த நிரலைச் செயல்படுத்தவிருக்கும் கணிப்பொறியில் பொருத்தப்பட்டுள்ள நுண்செயலியின் (microprocessor) சில்லுமொழியில்தான் அதாவது அசெம்பிளி மொழியில்தான் பெரும்பாலும் எழுதப்படும். சி-மொழியின் கம்ப்பைலர்கள், சி-மொழியிலேயே எழுதப்படுகின்றன என்பது சற்றே வியப்பான செய்திதான். சி-மொழியின் முந்தைய பதிப்புகளைப் (earlier versions of C) பயன்படுத்திப் புதிய சி-மொழிக் கம்ப்பைலர்கள் உருவாக்கப்படுகின்றன.
 (5) பிட்நிலைச் செயல்பாடுகள்
நாம் நிரலில் பயன்படுத்தும் மாறி அல்லது மாறிலிகளின் மதிப்புகள் (values of variables and constants) உள்பட அனைத்தையும், கணிப்பொறி 0,1 என்ற இரு இலக்கங்களின் தொகுப்பாகத்தான் நினைவகத்தில் இருத்திக் கொள்கிறது என்பதை நாம் அறிவோம். சி-மொழிக் கட்டளையால் நினைவகத்தில் இருத்தி வைக்கப்பட்டுள்ள மதிப்புகளில் உள்ள 0, 1 தொகுப்பில் உள்ள தனித்தனிப் பிட்டுகளை மாற்றியமைக்க முடியும். அதன் மூலம் மாறியின் மதிப்பை மாற்ற முடியும். நிரலில் கையாளும் தரவுகளை (data) பைட்டு நிலையில் மட்டுமின்றி பிட் நிலையிலும் கையாள முடிவது (bit level handling) சி-மொழியின் சிறப்புக் கூறாகும்.
 (6) சிறப்பு மிக்க சி-மொழிச் சுட்டு
அனைத்துக் கணிப்பொறி மொழிகளிலும் நினைவகத்தில் குறிப்பிட்ட இடத்தில் இருத்தி வைக்கப்பட்டுள்ள ஒரு மாறியை, அதன் மதிப்பைக் கையாள வசதியுண்டு. ஆனால் அம்மாறியை, கணிப்பொறி நினைவகப் பரப்பில் இருத்தி வைத்துள்ள இடத்தின் முகவரியைக் கையாளவும் சி-மொழியில் வசதியுண்டு. அவ்வாறு நினைவகக் குறியிட முகவரியைக் (Address of the Memory Location) கையாண்டு, மாறிகளின் மதிப்புகளில் மாற்றங்களைச் செய்ய முடியும். இதற்குத்தான் சி-மொழியின் ’பாயின்டர்’ (pointer) பயன்படுகிறது. பாயின்டரைத் தமிழில் ’சுட்டு’ என்கிறோம். பாயின்டரைத் திறமையுடன் கையாளும் வல்லமை பெற்றவர்களின் காலடியில் சி-மொழி ஏவல் புரியக் காத்திருக்கும்.
 (7) சுழல் செயல்பாடு
கணிப்பொறி நிரலில் சுழல் செயல்பாடு (Recursion) என்கிற ஒரு கருத்துரு உண்டு. பெரும்பாலான கணிப்பொறி மொழிகளில் இந்த வசதியில்லை. அதாவது ஒரு பிரதான நிரல் ஒரு குறிப்பிட்ட பணியைச் செய்து முடிக்க, செயல்கூறு அல்லது செயல்முறையின் (Function or Procedure) உதவியை நாடும். இத்தகைய ஒரு துணைக்கூறானது (செயல்கூறு அல்லது செயல்முறை) அந்தப் பணியை முடிக்க வேறொரு துணைக்கூறின் உதவியை நாடலாம். ஒரு துணைக்கூறு, அந்தப் பணியை முடிக்க, அதே துணைக்கூறின் உதவியை நாட முடியுமா? கோபால் மொழியில், ஒரு செயல்முறைப் பத்தியில் (Procedure Para) அதே செயல்முறையை நிறைவேற்றும்படியான ஆணையைக் கொடுக்க முடியாது. ஆனால் சி-மொழியில் ஒரு ஃபங்ஷன் உள்ளே அதே ஃபங்ஷனை நிறைவேற்றச் சொல்லி ஆணையிடலாம். இந்தச் சுழல் செயல்பாடு சி-மொழியின் தனிச்சிறப்பாகும்.
 (8) உயர்தனிச் செம்மொழி
சி-மொழிக்கு முன்பும் பின்பும் கணிப்பொறி உலகில் செல்வாக்குப் பெற்று விளங்கிய பல்வேறு மொழிகள் இன்று, இருந்த சுவடு தெரியாமல் போய்விட்டன. ஏறத்தாழ நாற்பது ஆண்டுகளாக, சி-மொழி மட்டும் அதே செல்வாக்கோடு, கணிப்பொறி உலகில் இன்னும் வலம் வந்துகொண்டிருக்கிறது. “உன் சீரிளமைத் திறம்வியந்து செயல்மறந்து வாழ்த்துதுமே” என்று, உயர்தனிச் செம்மொழியான தமிழ்மொழிக்குச் சூட்டப்பட்ட புகழாரம் சி-மொழிக்கும் பொருந்தும். கால ஓட்டத்தில் காலாவதி (Obsolete) ஆகிப் போகாமல், அனைவரையும் ஈர்க்கும் திறனோடு இன்றைக்கும் பவனி வந்து கொண்டிருக்கிறது.
 (9) கச்சிதமான மொழி
சி-மொழி மிகமிகக் குறைந்த சிறப்புச் சொற்களைக் (reserved words) கொண்ட மொழியாகும். மொத்தம் 32 சிறப்புச் சொற்கள் மட்டுமே சி-மொழியில் உண்டு.
autodoubleintstruct
breakelselongswitch
caseenumregistertypedef
charexternreturnunion
constfloatshortunsigned
continueforsignedvoid
defaultgotosizeofvolatile
doifstaticwhile
ரிட்சியின் சொற்களில் சொல்வதெனில், சி-மொழி சிறியது. ஆனால் மிகப்பெரும் பணிகளையும் செய்ய வல்லது. சி-மொழி சிக்கனமானது. ஆனால் வளம் மிக்கது. மிக நவீன கட்டுப்பாட்டுக் கட்டளை அமைப்புகளையும் (Control Structures), தரவுக் கட்டுருக்களையும் (Data Structures), வளமான செயற்குறிகளையும் (Operators) கொண்டது. எந்த ஒரு குறிப்பிட்ட பயன்பாட்டுக்காகவும் உருவாக்கப்பட்டதன்று. சி-மொழி ஒரு பொதுப்பயன் மொழியாகும். இதன் பொதுத்தன்மை, மிகச் சக்தி வாய்ந்த மொழிகளால் சாதிக்க முடியாததையும் சாதிக்க வல்லதாய் உள்ளது.
 (10) இயக்கமுறை, கணிப்பொறி சாரா மொழி
சி-மொழி மிகவும் இனிமையானது, தெளிவானது, வெளிப்படையானது, பல்திறன் மிக்கது, கற்க எளிமையானது, ஒருவரின் அனுபவத்துக்கு ஏற்ப இதன் திறனும் கூடிக்கொண்டே போகிறது என்று ரிட்சியும், கெர்னிகனும் தம் நூலின் முன்னுரையில் குறிப்பிடுகின்றனர். சி-மொழி எந்தவோர் இயக்க முறைமையுடனோ (Operating System), கணிப்பொறியுடனோ (Machine) கட்டுண்டது அன்று. என்றாலும் கம்ப்பைலர்களையும், இயக்க முறைமைகளையும் எழுதப் பயன்படுவதால், சி-மொழி ஒரு ‘முறைமை நிரலாக்க மொழி’ (System Programming Language) என்றழைக்கப்படுகிறது. அதுமட்டுமின்றி பல்வேறு பணித்தளங்களிலும் (Platforms) எதிர்கொள்ளும் மிகப்பெரும் சவால்களுக்குத் தீர்வு காணவும் சி-மொழி பயன்படுகிறது.
 சி-மொழியில் இருப்பதும் இல்லாததும்
சி-மொழியில் ஸ்டிரிங், லிஸ்ட், அர்ரே போன்ற தருவிக்கப்பட்ட தரவினங்களை (derived data types) கையாள நேரடியான ஆப்பரேட்டர்கள் கிடையாது. அர்ரே, ஸ்டிரிங் ஆகியவற்றை முழுமையாக எடுத்தாளும் செயல்முறைகள் எதுவும் வரையறுக்கப்படவில்லை. ஆனால் ஸ்ட்ரக்சர்களை முழுமையாக நகலெடுக்க முடியும். நினைவக மேலாண்மைக்கு தானியங்கு நினைவக விடுவிப்பு (Garbage Collection) வசதி சி-மொழியில் கிடையாது. இன்னும் சொல்லப்போனால் சி-மொழியில் திரையகவழி உள்ளீட்டு, வெளியீட்டுக்கு (screen input, output) உள்ளிணைந்த கட்டளைகள் கிடையாது. அதாவது read, write போன்ற நேரடியான கட்டளைகள் கிடையாது. ஃபைல்களை அணுகுவதற்கு உள்ளிணைந்த வழிமுறைகள் எதுவுமில்லை. இவையனைத்தும் நூலகச் செயல்கூறுகள் (Library Functions) மூலமாகவே செயல்படுத்தப்படுகின்றன.
சி-மொழியில் பொருள்நோக்கு நிரலாக்க கருத்துருக்கள் (Object Oriented Programming Concepts) கிடையாது. பல்புரியாக்கம் (multi-threading) கிடையாது. ஒரே திரெட் மட்டுமே உண்டு. மற்றும் பல்நிரலாக்கமும் (multi-programming) கிடையாது. ஒன்றுக்கு மேற்பட்ட உடன்நிகழ் செயல்பாடுகளோ (concurrent activities), உடன்நிகழ் நிரல்கூறுகளோ (co-routines) கிடையாது. ஒத்தியக்கம் (Synchronization) என்னும் கருத்துருவும் இல்லை. இவையெல்லாம் சி-மொழியின் குறைபாடுகள் அல்ல. சி-மொழி மிகச் சிறியதாய், மிகக் கச்சிதமாய் அமைய இவையே காரணம். சி-மொழி சிறியதாய் இருப்பதால் அதனை மிக எளிதாய் விளக்க முடியும். மிக விரைவாய்க் கற்க முடியும். எனவே ஒரு சி-மொழி நிரலர் எப்போதும் சி-மொழியை அதன் முழுமையோடு தெரிந்து, புரிந்து பயன்படுத்த முடியும் அல்லவா?

பாடம்-3
சி நிரலைச் செயல்படுத்தல்
சி-மொழியில் ஒரு நிரலை எழுதிச் செயல்படுத்துவது எப்படி என்பதைப் பார்ப்போம். சி-மொழியில் ஜோர்டெக்-சி, போர்லாண்டு-சி, மைக்ரோசாஃப்ட்-சி, டர்போ-சி என்று எத்தனையோ வகைகளும், ஒவ்வொன்றிலும் பல்வேறு பதிப்புகளும் உள்ளன. இவை எல்லாம் பல்வேறு நிறுவனங்கள் உருவாக்கிய சி-மொழிக்கான கம்ப்பைலர்கள். இவையனைத்தும் ரிட்சி உருவாக்கிய அடிப்படையான சி-மொழியின் இலக்கணப்படி அமைந்தவை.
நாம் எழுதும் சி-மொழி நிரலை ஏதேனும் ஒரு கம்ப்பைலரில் கம்ப்பைல் செய்து பிறகுதான் இயக்கிப் பார்க்க முடியும். கம்ப்பைலர்களில் பின்பற்றப்படும் வழிமுறைகளில் மிகச்சிறு வேறுபாடுகள் இருக்க முடியும். நமது பாடங்களைப் பொறுத்தவரை டர்போ-சி (Turbo C) கம்ப்பைலரை அடிப்படையாகக் கொண்டே நிரல்கள் வடிவமைக்கப்பட்டுள்ளன. கருத்துருக்களும் விளக்கப்பட்டுள்ளன. ஒன்றில் நல்ல அனுபவம் பெற்று விட்டால், மற்றதில் பணிபுரிவது எளிதாகவே இருக்கும்.
 நிரலை எழுதிச் சேமித்தல்
டர்போ சி-யின் ஃபைல்கள் TC என்னும் டைரக்டரியில் இருப்பதாக வைத்துக் கொள்வோம். அந்த டைரக்டரியில் இருந்துகொண்டு,
C : \TC>TC WELCOME
என்று கட்டளை கொடுங்கள். திரையில் டர்போ சி-யின் ஒருங்கிணைந்த புரோகிராம் உருவாக்க சூழலின் (Integrated Development Environment) மெனுவும் புரோகிராம் எடிட்டரும் தோன்றும்.
டர்போ சி-யின் எடிட்டரில் கீழ்க்காணும் புரோகிராமை தட்டச்சு செய்யுங்கள்:
/* Program No.1.1 */
/* WELCOME.C */
#include < stdio.h >
main()
{
      printf("Welcome to C!");
}
சிறிய எழுத்து, பெரிய எழுத்து, அடைப்புக் குறிகள், அரைப்புள்ளி ஆகியவற்றை எதையும் மாற்றாமல் மறக்காமல் அப்படியே தட்டச்சு செய்யுங்கள். ஏன் என்று பிறகு விளக்கமாகப் பார்ப்போம். நிரலைத் தட்டச்சிட்டு முடித்த பிறகு F2 விசையை அழுத்துங்கள். உங்கள் நிரல் WELCOME.C என்ற பெயரில் நிலைவட்டில் சேமிக்கப்பட்டுவிடும். C என்ற வகைப்பெயரை ((Extension) டர்போ-சி தானாகவே கோப்பின் பெயரில் ஒட்ட வைத்துக்கொள்ளும்.
 நிரலைக் கம்ப்பைல் செய்து செயல்படுத்தல்
கோப்புச் சேமிக்கப்பட்ட பின்னும் டீசி எடிட்டர் திரை மறையாமல் அப்படியே இருக்கும். இப்போது F9 விசையை அழுத்துங்கள். திரைக்குள் ஒரு குட்டித்திரை தோன்றும். கம்ப்பைலிங், லிங்க்கிங் ஆகிய இரண்டு வேலைகளும் கடகடவென்று நடந்து முடியும். WELCOME.EXE என்ற கோப்பு உருவாகி விடும். Success என்ற செய்தி திரையில் தெரியும். Press any key என்ற செய்தி மின்னிக் கொண்டிருக்கும். நீங்கள் Alt+F கீகளை ஒருசேர அழுத்துங்கள். மேலே முதல் வரியிலுள்ள மெனுத் தேர்வுகளில் File என்பதில் உள்ள துணைமெனுப் பட்டியல் திரையில் தோன்றும். இப்போது O (ஓ) என்னும் எழுத்தைத் தட்டுங்கள். அது ’ஆப்பரேட்டிங் சிஸ்டம் ஷெல்லைக்’ (OS Shell) குறிக்கிறது.
அதாவது, நீங்கள் தற்காலிகமாக டீசி பணிப் பரப்பைவிட்டு நீங்கி, டாஸ் பணிப் பரப்பிற்கு வந்திருக்கிறீர்கள் என்று பொருள். திரையில் மைக்ரோசாஃப்டின் பதிப்புச் செய்தியும், C:\TC> என்ற டாஸ் சின்னமும் தோன்றும். இப்போது,
C : \ TC > WELCOME
என்று கட்டளை கொடுங்கள். சுத்தமான திரையின் மத்தியில்,
Welcome to C!
என்ற வாசகம் தோன்றும். அருகில் C : \TC> என்னும் டாஸ் சின்னம் இருக்கும். இப்போது EXIT என்ற கட்டளை கொடுங்கள். மீண்டும் டீசி எடிட்டரில் உங்கள் நிரல் தோன்றும். ஏதேனும் திருத்தங்கள் இருப்பின், செய்யலாம். முன்பு சொன்னது போலவே F2 விசையை அழுத்தி நிரலைச் சேமிக்கலாம். F9 மூலம் .EXE கோப்பினை உருவாக்கலாம். Alt+F+O மூலம் ஓஎஸ் ஷெல்லுக்கு வந்து நிரலைச் செயல்படுத்தலாம்.
 மாற்று வழிமுறை
சி-மொழி நிரலை இயக்கிப் பார்க்க இன்னொரு வழிமுறையும் உள்ளது. நிரலை எழுதி முடித்தவுடன் Ctrl மற்றும் F9 கீகளை ஒருசேர அழுத்துங்கள். நிரல் கம்ப்பைல் ஆகி, லிங்க் ஆகி, .EXE கோப்பு உருவாகி முடிந்துவிடும். ஆனால் உடனே ஐடிஇ-க்கே திரும்பிவிடும். நிரலின் வெளியீட்டைப் பார்க்க வேண்டுமானால் Alt+F5 விசைகளை அழுத்த வேண்டும். டாஸ் திரையில் வெளியீடு தெரியும். என்டர் விசையைத் தட்டினால் மீண்டும் ஐடிஇ-க்கே திரும்பலாம். பலரும் இந்த முறையையே பின்பற்றுகிறார்கள். ஆனால், சில சி-மொழி நிரல்களை இந்த முறையில் இயக்கிப் பார்க்க முடியாது. எனவே, F9 அழுத்திக் கம்ப்பைல் / லிங்க் செய்தபின், Alt+F+O அழுத்தி, டாஸ் சூழலுக்கு வந்து, நிரலை இயக்கிப் பார்க்கும் முறையே சிறந்த முறையாகும்.
டீசி எடிட்டரில் இருக்கும்போது Alt+F விசைகளை ஒருசேர அழுத்தி, துணைமெனு வந்த பிறகு L என்ற எழுத்தை அழுத்தி, ஏற்கெனவே எழுதப்பட்டுள்ள ஒரு நிரலின் பெயரை உள்ளிட்டு, அதனை எடிட்டரில் வரவழைக்கலாம். L-க்குப் பதில் N கீயை அழுத்திப் புதிய நிரலை எழுதலாம். எழுதி முடித்துச் சேமிக்கும் முன்பாகப் புதிய நிரலுக்குப் பெயர் கொடுக்கலாம்.
டீசி பணிப் பரப்பை அதாவது டீசி ஐடிஇ-யை விட்டு வெளியே வருவதற்கு Alt +F விசைகளை ஒரு சேர அழுத்திப் பின் Q விசையைத் தட்டுங்கள். திரையில் C:\TC> தோன்றும். விண்டோஸிலிருந்து TC-க்குச் சென்றிருப்பின் மீண்டும் விண்டோஸ் முகப்புக்கு வந்து விடலாம். இப்போது டீசியைவிட்டு நிரந்தரமாக வெளியே வந்துவிட்டீர்கள்.
 வேறு எடிட்டரைப் பயன்படுத்தல்
சி-மொழி நிரலை நோட்பேடு போன்ற வேறு எந்த எடிட்டரில் வேண்டுமானாலும் எழுதலாம். வேறு எடிட்டரில் எழுதும்போது .C என்ற வகைப்பெயர் கொடுத்து, WELCOME.C என்று நிரல் கோப்பினை உருவாக்குங்கள். பிறகு, TC டைரக்டரிக்கு வந்து,
C:\TC>TCC WELCOME
என்று கட்டளை கொடுங்கள். ஒரே நொடியில் நிரல் கம்ப்பைல், லிங்க் செய்யப்பட்டு, WELCOME.EXE என்ற கோப்பு உருவாகிவிடும். ஆனால், டீசி ஐடிஇ-யில் நிரல் எழுதிக் கம்ப்பைல் செய்யும்போது, நிரலில் உள்ள பிழைகளைக் கண்டறிந்து திருத்துவதற்கு ஐடிஇ-யின் சில தனிச்சிறப்பான வசதிகளை பயன்படுத்திக் கொள்ள முடியும்.
[பாடம்-3 முற்றும்]

பாடம்-4
சி நிரலின் கூறுகள்
ஒரு நிரலின் கட்டமைப்பில், இருவகைக் கூறுகள் உள்ளன. ஒன்று மரபு (Convention); மற்றொன்று விதிமுறை (Rule). மரபுகளை, நீங்கள் விரும்பினால் பின்பற்றலாம். இல்லாவிட்டால் விட்டுவிடலாம். மரபுகள் பின்பற்றப்படா விட்டாலும் அந்த நிரல் சரியாகவே செயல்படும். ஆனால் விதிமுறைகளை நிரல் எழுதும்போது கட்டாயம் கடைப்பிடித்தே ஆக வேண்டும். இல்லையேல் நிரல் கம்ப்பைல் ஆகாது அல்லது சரியாகச் செயல்படாது.
ஒவ்வொரு மொழியிலும் மரபு முறைகளும், விதிமுறைகளும் வேறுபடுகின்றன. ஆனால், இந்த இரண்டு கூறுகள்தாம் ஒரு மொழியில் எழுதப்படும் நிரலின் கட்டமைப்பினை முடிவு செய்கின்றன.
ஒரு சிறு நிரலை எடுத்துக் கொள்வோம். இந்த நிரலைச் செயல்படுத்தியவுடன், ஓர் ஆண்டை உள்ளிடும்படி கேட்கும். நாம் கொடுத்த ஆண்டு லீப் ஆண்டா அல்லது சாதாரண ஆண்டா என்பதைக் கணக்கிட்டுச் சொல்லும். இந்த நிரலில் கட்டளை வாக்கியங்கள் எப்படி அமைந்துள்ளன, அவற்றின் பொருள் என்ன நிரலின் வடிவமைப்பு எப்படி உள்ளது, மரபு முறைகளும் விதிமுறைகளும் எப்படிப் பின்பற்றப்பட்டுள்ளன என்ற விவரங்களை மேலோட்டமாக இப்பாடத்தில் அறிந்துகொள்வோம். அடுத்துவரும் பாடங்களில் ஒவ்வொன்றைப் பற்றியும் ஆழமாகக் கற்போம்.
/* Program No.1.2 */
/* LEAPYEAR.C */
/* Program to find square of a number */
/* Written by M.Sivalingam on 25-04-1994 */
#include <stdio.h>
main()
{
       int y;
       printf("Enter year: ");
       scanf("%d",&y);
       if (y%4==0 && y%100!=0 || y%400==0)
            printf("%d is a leap year", y);
       else
            printf("%d is not a leap year", y);
இந்த நிரலை எழுதி இயக்கிப் பார்ப்பதற்கு முன்பாக, நிரலின் கூறுகள் ஒவ்வொன்றையும் வரிவரியாக ஆய்வு செய்வோம்.
 1. குறிப்புரை (Comment)
ஒரு நிரலின் தலைப்பில், நிரலின் முகப்புரை (Preamble) இடம் பெறுவது மரபாகும். நிரலின் பெயர், நிரலின் நோக்கம், நிரலை எழுதியவர் பெயர், நாள் போன்ற குறிப்புகள் கொண்ட பகுதி முகப்புரை எனப்படுகிறது. சி-மொழியில் இதனைக் குறிப்புரை (Comment) என்கிறோம். குறிப்புரை /* */ ஆகிய குறிகளுக்கு இடையில் அமையும். சி-மொழி நிரலுக்குக் குறிப்புரை கட்டாயமில்லை. மேற்கண்ட நிரலில் குறிப்புரைகள்,
/* Program No.1.2 */
/* LEAPYEAR.C */
/* Program to check leap year */
/* Written by M.Sivalingam on 25-04-1994 */
என அமைந்துள்ளன. சி-மொழியில் குறிப்புரை நிரலின் முகப்பில் மட்டுமின்றி எங்கு வேண்டுமானாலும் இடம் பெறலாம்.
குறிப்புரைக்கும், நிரல் செயல்பாட்டுக்கும் எவ்விதத் தொடர்பும் இல்லை. இந்தக் குறிப்புரைகள் இல்லாவிட்டாலும் நிரல் சரியாகவே செயல்படும் என்பதை மறக்க வேண்டாம். நிரலைக் கம்ப்பைல் செய்யும்போது /* */ ஆகியவற்றுக்கு இடையே அமையும் குறிப்புரைகளைக் கம்ப்பைலர் புறக்கணித்துவிடும். இத்தகைய விளக்கக் குறிப்புரைகள் நிரலைப் படிக்கின்ற மற்றவர்களுக்கு பெரிதும் பயன்படுகின்றன. நிரலை எழுதியவர்க்கேகூட இந்த விளக்கக் குறிப்புகள் பயனுள்ளவையாக இருக்கும்.
குறிப்புரை எத்தனை வரிகள் வேண்டுமானாலும் இருக்கலாம். குறிப்புரை முடிந்த பிறகு */ என்ற குறிகளை இடவேண்டும். ஒவ்வொரு கட்டளைக்கும் அரைப்புள்ளி இடவேண்டும் என்ற சி-மொழி விதிமுறை விளக்கவுரைக்குப் பொருந்தாது.
/* */ ஆகிய குறிகளைக் குறிப்புரையின் ஒவ்வொரு வரியிலும் பயன்படுத்தத் தேவையில்லை. விளக்கவுரை எத்தனை வரிகள் இருந்தாலும் தொடக்கத்தில் /* எனவும், இறுதியில் */ எனவும் குறிப்பிட்டால் போதும்.
/*..... /* .....*/ .....*/
என்று குறிப்புரைக்குள், இன்னொரு குறிப்புரை எழுத அனுமதி கிடையாது.
நிரலில் எங்கு வேண்டுமானாலும் குறிப்புரை இடம்பெறலாம். ஒவ்வொரு கட்டளை வரிக்கு முன்னும் பின்னும் குறிப்புரை அமைக்கலாம். கட்டளை வரியிலேயே குறிப்புரை இடம்பெறலாம்.
int i, J;/*Declaring variables*/
என்று அமைக்கலாம். ஒரு கட்டளையின் நடுவில்கூட குறிப்புரை அமைக்க முடியும் என்பது சி-மொழியின் சிறப்புக்கூறாகும். printf(), scanf() மற்றும் இனி படிக்கவிருக்கும் if(), for(), while() ஆகியவற்றில் அடைப்புக்குறிகளுக்கு உள்ளேயும் குறிப்புரை அமைக்கலாம்.
scanf("%d", &num /* Address of the variable */);
printf(/* Display the result */ "%d is a leap year", y);
என்று குறிப்புரைகளை அமைக்கலாம். இவ்வாறெல்லாம் ஒவ்வொரு வரிக்கும் குறிப்புரை எழுத வேண்டியதில்லை. தேவையான இடங்களில் மட்டும் குறிப்புரை சேர்ப்பது சிறந்தது.
 2. நூலகக் கோப்புகள் (Library Files)
நிரலின் மூன்றாவது வரியில்,
# include <stdio.h>
என்று குறிப்பிடப்பட்டுள்ளது. stdio.h என்பது சி-மொழியின் உள்ளிணைந்த நூலகக் கோப்பாகும். இதனை ’ஹெடர் ஃபைல்’ என்றும் அழைப்பர். stdio என்ற சொல் (எஸ்டீடிஐஓ என உச்சரிப்பர்) standard input output என்பதையும், h என்ற எழுத்து header என்பதையும் குறித்து நிற்கிறது. stdio கோப்பில் பல்வேறு உள்ளீட்டு, வெளியீட்டுச் செயல்கூறுகள் (I/O Functions), மாறிலிகள் (constants) வரையறுக்கப்பட்டுள்ளன. அவற்றை நமது நிரலில் பயன்படுத்த வேண்டியிருப்பின் அந்தக் கோப்பினை #include என்ற கட்டளைச்சொல் மூலம் இணைத்துக் கொள்கிறோம். ஒரே நிரலில் ஒன்றுக்கு மேற்பட்ட கோப்புகளை இணைத்துக் கொள்ள முடியும். ஒவ்வொரு கோப்பினையும் தனித்தனி #include கட்டளைகளில் அடுத்தடுத்த வரிகளில் குறிப்பிட வேண்டும். #include கட்டளை நிரலின் தொடக்கத்தில் இடம்பெற வேண்டும்.
 3. செயல்கூறுகள் (Functions)
நிரலின் அடுத்தவரி,
main()
என அமைந்துள்ளது. ( ) என்ற அடைப்புக் குறிகள் main என்பது ஒரு ஃபங்ஷன் என்பதை குறிக்கின்றன. அதன்கீழ் உள்ள கட்டளைகள் அனைத்தும் { } என்ற அடைப்புக் குறிகளுக்குள் கொடுக்கப்பட்டுள்ளன. ஒவ்வொரு சி-மொழி நிரலும் ஃபங்ஷன்களால் ஆனதுதான். ஒரு நிரலில் ஒரு ஃபங்ஷனோ அல்லது ஒன்றுக்கு மேற்பட்ட ஃபங்ஷன்களோ இருக்கலாம். ஒன்று மற்றதை அழைக்கலாம்.
ஒவ்வொரு நிரலிலும் குறைந்தபட்சம் main() ஃபங்ஷன் மட்டுமாவது இருக்க வேண்டும் என்பது கட்டாய விதிமுறையாகும். main ஃபங்ஷனின் கட்டளைகளை { } என்னும் அடைப்புக் குறிகளுக்குள் அமைக்க வேண்டும் என்பதும் கட்டாய விதிமுறையாகும். இந்த இரு விதிமுறைகளுக்கும் உட்பட்டு எழுதப்பட்ட,
main()
{

}
என்பதுதான் சி-மொழியில் மிகச்சிறிய நிரல். இந்த நிரல் எந்தச் செயலையும் செய்யாது என்பது ஒருபுறம் இருக்க, இது சி-மொழியின் விதிமுறைப்படி எழுதப்பட்ட நிரல் (Legal Program) என்பதைக் கருத்தில் கொள்க. இதைக் குறிப்பிடுவதன் நோக்கம், ஒவ்வொரு சி-மொழி நிரலிலும்,
main ()
{
      ............ ;
      ............ ;
}
என்ற கட்டமைப்பு கட்டாயம் இருக்க வேண்டும் என்பதை வலியுறுத்தத்தான்.
 4. மாறிகளின் அறிவிப்பு (Declaration of Variables)
main() ஃபங்ஷனுக்குள் உள்ள முதல் வரி,
int y;
என்பதுதான். இதில் int என்பது integer என்னும் தரவு இனத்தைக் (Data Type) குறிக்கிறது. சி-மொழியில் char, int, float, double என்னும் அடிப்படைத் தரவினங்கள் வரையறுக்கப்பட்டுள்ளன. y என்பது int இனத்தில் ஒரு மாறி (variable) ஆகும். ஒரு சி-மொழி நிரலில் பயன்படுத்தப்படுகிற அனைத்து மாறிகளும் நிரலின் தொடக்கத்திலேயே அறிவிக்கப்பட வேண்டும் என்பது விதிமுறையாகும்.
 5. உள்ளீடு / வெளியீடு (Input / Output)
நிரலில் அடுத்து,
printf("Enter year: ");
scanf("%d",&y);
ஆகிய வரிகள் இடம்பெற்றுள்ளன. printf()-ல் ஒரு செய்தி வெளியிடப்பட்டுள்ளது. scanf()-ல் ஒரு மாறியின் மதிப்புப் பெறப்பட்டுள்ளது. printf(), scanf() ஆகியவை stdio.h என்னும் ஹெடர் ஃபைலில் வரையறுக்கப்பட்டுள்ள ஃபங்ஷன்கள் ஆகும். இத்தகைய உள்ளிணைந்த ஃபங்ஷன்களின் துணைகொண்டே சி-மொழி நிரலில் உள்ளீடும் வெளியீடும் செயல்படுத்தப்படுகின்றன. ஒற்றை எழுத்து, ஒரு சொல், ஒரு வரி எனப் பல்வேறு வகையில் உள்ளீடு / வெளியீடு செய்ய வெவ்வேறான ஃபங்ஷன்கள் உள்ளன. அவற்றைப் பற்றிப் பின்வரும் பாடங்களில் விரிவாகப் படிக்க இருக்கின்றோம்.
 6. கட்டளை அமைப்புகள் (Command Syntax)
ஒவ்வொரு கட்டளைத் தொடரின் இறுதியிலும், ஓர் அரைப்புள்ளி (;) இடம் பெற்றுள்ளதை நோக்குங்கள். இது கட்டாய விதிமுறையாகும். இங்கே அரைப்புள்ளி, கட்டளையை முடித்துவைக்கும் குறியீடாகப் (Terminator) பயன்படுகிறது, பாஸ்கல் மொழியில் உள்ளதுபோல், கட்டளைகளைப் பிரித்துக்காட்டும் குறியீடாக (separator) அல்ல என்பதைப் புரிந்துகொள்ள வேண்டும். ஒன்றுக்கு மேற்பட்ட கட்டளை வாக்கியங்களை ஒரே வரியில் எழுத முடியும். எடுத்துக்காட்டாக, மேற்கண்ட நிரலின் முதல் மூன்று வரிகளை,
int y ; printf (“Enter Year:”); scanf("%d",&y);
என்று ஒரே வரியில் எழுதினாலும் நிரல் செயல்படும்.
ஒரு கட்டளை வாக்கியம் மிக நீளமாக இருந்தால், \ என்னும் பின்சாய்வுக்குறி (Back Slash) மூலம் கட்டளை வாக்கியத்தைத் துண்டாக்கி ஒன்றுக்கு மேற்பட்ட வரிகளில் எழுதலாம்.
printf("Do you want to add more records? \
        Say Y/N : ");
என்று எழுதலாம். மேற்கண்ட நிரலில், அடுத்து,
if ()
     ........... ;
else
     ............. ;
என்னும் கட்டளை அமைப்பு பயன்படுத்தப்பட்டுள்ளது. இந்தக் கட்டளை, தீர்வுசெய் கட்டளை (Decision Making Command) அல்லது நிபந்தனைச் சரிபார்ப்புக் கட்டளை (Condition Checking Command) எனப்படுகிறது. மேலே உள்ள நிரலில் அந்தச் சொற்கள் இடம்பெற்ற வரிகளில் அரைப்புள்ளி கிடையாது என்பதைக் கவனியுங்கள். மேற்கண்ட நான்கு வரிகளையும்,
if (<Condition>) statement;
else statement ;
என இரண்டு வரிகளிலும் எழுதலாம். இதுதவிர, for(), while(), do...while() ஆகிய கட்டுப்பாட்டு மடக்கி (Control Loop) என்னும் கட்டளை அமைப்பும் சி-மொழியில் உண்டு. இவற்றைப் பற்றி இனிவரும் பாடங்களில் விரிவாகப் படிப்போம்.
 7. செயற்குறிகள் (Operators)
if () நிபந்தனையில் == != % && || ஆகிய செயற்குறிகள் (Operators) இடம்பெற்றுள்ளன. சி-மொழியில் கணக்கீடு, ஒப்பீடு, மதிப்பிருத்தல், நிபந்தனைச் சரிபார்ப்பு, ஒன்று கூட்டல், ஒன்று குறைத்தல், பிட்நிலைச் செயல்பாடு போன்ற பல்வேறு பணிகளுக்கும் பல்வேறு வகைப்பட்ட ’ஆப்பரேட்டர்கள்’ எனப்படும் செயற்குறிகள் பயன்படுத்தப்படுகின்றன. இவைபற்றித் தனியாக இனிவரும் பாடத்தில் படிப்போம்.
 8. வடிவமைப்புக் குறியீடுகள் (Format Specifiers)
சி-மொழி நிரலில் உள்ளீட்டு, வெளியீட்டுக் கட்டளைகளில் பல்வேறு வகையான வடிவமைப்புக் குறியீடுகள் (Format Specifiers) பயன்படுத்தப்படுகின்றன. இந்த நிரலில் scanf(), printf() கட்டளைகளில் %d என்கிற வடிவமைப்புக் குறியீடு பயன்படுத்தப்பட்டுள்ளது. உள்ளீட்டில் பெறப்படும் மதிப்பும் வெளியீட்டில் இடம்பெறும் மதிப்பும் ஓர் இன்டிஜர் என்பதை %d உணர்த்துகிறது. இதுபோல சி-மொழியில் ஒவ்வோர் உள்ளீட்டு வெளியீட்டுக் கட்டளையிலும், கையாளப்படும் மதிப்பு எந்த இனத்தைச் சார்ந்ததாகக் கருதப்பட வேண்டும் என்பதைக் குறிப்பிடக் கட்டாயமாக வடிவமைப்புக் குறியீட்டைப் பயன்படுத்த வேண்டும்.
 9. சிறிய எழுத்து / பெரிய எழுத்து (Lower Case / Upper Case)
நிரலை உற்று நோக்குங்கள். பெரும்பாலும் சிறிய எழுத்தில் எழுதப்பட்டுள்ளன. include, main, int, printf, scanf, if, else - ஆகிய சொற்களைப் பெரிய எழுத்திலோ, கலப்பு எழுத்திலோ எழுதினால் நிரல் கம்ப்பைல் ஆகாது. .EXE கோப்பு உருவாகாது. கம்ப்பைலர் பிழைசுட்டும். நாம் பயன்படுத்துகிற மாறிகள் (variables), மாறிலிகள் (constants) ஆகியவற்றின் பெயர்கள்கூட வடிவக் கட்டுப்பாடு உள்ளவை (case sensitive). SUM என்கிற ஒரு மாறியை உங்கள் நிரலில் பயன்படுத்துவதாக வைத்துக் கொள்வோம். SUM, Sum, sum என்று எழுதப்படுகிற மூன்றும் வெவ்வேறு மாறிகள் ஆகும்.
 10. வெற்றுவரிகள் / இடவெளிகள் (Blank Lines / Spaces)
சி-மொழி நிரலின் கட்டளைத் தொடர்களை வரியின் எந்த இடத்தில் வேண்டுமானாலும் எழுதத் தொடங்கலாம். ஃபோர்ட்ரான், கோபால் போன்ற மொழிகளில் குறிப்பிட்ட கட்டளையை, வரியில் ஒரு குறிப்பிட்ட இடத்திலிருந்துதான் தொடங்க வேண்டும் என்ற விதிமுறை உண்டு.
ஒரு கட்டளை வாக்கியத்தில் ஒரு சொல்லுக்கும், இன்னொரு சொல்லுக்கும் இடையே ஒன்றுக்கு மேல் எத்தனை இடவெளி (space) இருந்தாலும் நிரல் செயல்படும். கட்டளை வரிகளுக்கு இடையே வெற்று வரிகள் எத்தனை வேண்டுமானாலும் இருக்கலாம். சி-மொழிக் கம்ப்பைலர் வெற்று வரிகள், தத்தல்கள் (Tabs), ஒன்றுக்கு மேற்பட்ட இடவெளிகள் (spaces) ஆகியவற்றைப் புறக்கணித்துவிடும்.
கட்டமைப்பு மிக்க சி-மொழியின் நிரல் கட்டமைப்பை நன்கு புரிந்து கொண்டுள்ளோம். இனி வரிசைப்படி ஒவ்வொரு கருத்துருவையும் (concept) விரிவாகக் கற்றுக் கொள்வோம்.
[பாடம்-4 முற்றும்]

No comments:

Post a Comment