பாடம்-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) விரிவாகக் கற்றுக் கொள்வோம்.