மு.சிவலிங்கம் வலையகம்

சி-மொழிப் பாடங்கள்
 

பாடம்-7
சி-மொழியில் மாறிலிகள்
(Constants in C)

ஒரு புரோகிராமில் எப்போதுமே மாற்றப்படும் சாத்தியக்கூறு இல்லாத ஒரு டேட்டாவை மாறிலி (Constant) என்கிறோம். சி-மொழியில் இரண்டு வகையாக மாறிலிகள் செயல்படுத்தப்படுகின்றன. (1) #define பதிலீடுகள் மூலமாக. இத்தகைய மாறிலிகள் ‘குறியீட்டு மாறிலிகள்’ (Symbolic Constants) என்று அழைக்கப்படுகின்றன. (2) const என்னும் பண்பேற்றி (Qualifier) மூலமாக. இத்தகைய மாறிலிகள் ‘பண்பேற்றிய மாறிகள்’ (Qualified Variables) எனப்படுகின்றன. இவ்விரண்டு வகைகளையும் எடுத்துக் காட்டுகளுடன் பார்ப்போம்.

 நேரடி மதிப்பு

புரோகிராமில் எப்படிப்பட்ட இடங்களில் மாறிலியைப் பயன்படுத்த முடியும் என்பதற்கு ஒரு சரியான எடுத்துக்காட்டைப் பார்ப்போம். பயனாளரிடம் இருந்து ஆர அளவை (radius) பெற்று வட்டத்தின் பரப்பளவைத் திரையிடும் புரோகிராமைப் பாருங்கள்:

/* Program No. */
/* AREA1.C */
#include <stdio.h>
main()
{
      int radius;
      float area;
      printf(“\nEnter radius: “);
      scanf(“%d”, &radius);
      area = 3.14 * radius * radius;
      printf(“Area of the circle is %f”, area);
}

இந்தப் புரோகிராமில் பரப்பளவைக் காணும் கட்டளையில் 3.14 என்னும் மதிப்பை நேரடியாகப் பயன்படுத்தி உள்ளோம். இந்தப் புரோகிராமை எத்தனை முறை இயக்கினாலும், ஆர அளவை எப்படிக் கொடுத்தாலும் 3.14 என்னும் மதிப்பு மாறப்போவதில்லை. ஒரே புரோகிராமில் வெவ்வேறு இடங்களில் வட்டத்தின் பரப்பளவை காணவேண்டி இருந்தாலும் இதே 3.14 மதிப்பைத்தான் பயன்படுத்த வேண்டியிருக்கும்.

3.14 என்பது இந்தப் புரோகிராமில் மட்டும் அல்ல உலகிற்கே ஒரு பொதுவான எண் அல்லவா? இப்படிப்பட்ட உலகப் பொதுவான எண்களை மட்டும் அல்ல உங்கள் புரோகிராமிற்கு மட்டும் பொதுவான (மதிப்பு மாறாத) எண்களைக்கூட இப்படி நேரடியாகக் கணக்கீடுகளில் பயன்படுத்தக் கூடாது. இந்தப் புரோகிராமைப் படிப்பவர்களுக்கு 3.14 என்ற எண்ணின் முக்கியத்துவம் புலப்படாமலே போகும். புரோகிராமை எழுதியவர்க்கே, பல நேரங்களில், எக்ஸ்பிரஷன்களில் காணப்படும் இதுபோன்ற எண்கள் புதிர் எண்களாகத் தோன்றும். மொழி வல்லுநர்கள் இத்தகைய எண்களை ‘மேஜிக் எண்கள்’ எனக் கிண்டலாகக் குறிப்பிடுவர். புரோகிராமுக்குப் பொதுவான இப்படிப்பட்ட மாறா மதிப்புகளை நேரடியாகப் பயன்படுத்தக்கூடாது என்பது அவர்களின் கருத்து. அவற்றை ஒரு மாறிலி வழியாகவே பயன்படுத்த வேண்டும். எப்படி எனப் பார்ப்போம்.

 குறியீட்டு மாறிலி

சி-மொழியில் குறியீட்டு மாறிலிகளை வரையறுக்க, #define என்னும் கட்டளைச் சொல் பயன்படுத்தப்படுகிறது. புரோகிராமின் தொடக்கத்தில்,

#define PAI 3.14

என்று அறிவித்து விட்டுப் புரோகிராமின் உள்ளே,

area = PAI * radius * radius;

என்று பரப்பளவைக் கணக்கிட வேண்டும். கீழே உள்ள புரோகிராமை நோக்குங்கள்:

/* Program No. */
/* AREA2.C */
#include <stdio.h>
#define PAI 3.14
main()
{
      int radius;
      float area;
      printf(“\nEnter radius: “);
      scanf(“%d”, &radius);
      area = PAI * radius * radius;
      printf(“Area of the circle is %f”, area);
}

#define என்பதைக் கம்ப்பைல் பணிக்கு முந்தைய நெறியுறுத்தம் (pre-processor directive) என்று கூறுவர். அதாவது புரோகிராமில் எங்கெல்லாம். PAI இடம்பொற்றுள்ளதோ. அங்கெல்லாம் 3.14 என்ற மதிப்பு பதிலிடப்பட்டு, அதன்பிறகே புரோகிராம் கம்ப்பைல் செய்யப்படும்.

இவ்வாறு புரோகிராமில் கையாளும் மாறா மதிப்புகளை மாறிலிகளாகக் கையாளுவதில் இரண்டு வகையான நன்மைகள் உள்ளன:

(1) PAI ஒரு மாறா மதிப்பு என்பது புரோகிராமைப் படிப்பவர்க்கு எளிதில் புலனாகும். பொருள் பொதிந்ததாகவும் உள்ளது.

(2) PAI - யின் மதிப்பை இன்னும் துள்ளியமாக 3.142 என்றோ அல்லது 3.1415 என்றோ பயன்படுத்த எண்ணினால் #define வரையறுப்பில் மாற்றினால் போதும். நேரடியாக மதிப்பை பயன்படுத்தி இருந்தால், அம்மதிப்பு இடம்பெற்ற அத்தனை கணக்கீடுகளையும் கண்டறிந்து மாற்ற வேண்டும். மிகப் பெரிய புரோகிராம்களில் இது ஒரு சிக்கலான பணியாகும்.

புரோகிராமின் தொடக்கத்தில் மாறிலியை அறிவித்தபின் புரோகிராமின் உள்ளே,

PAI = 3.142;

என்று புதிய மதிப்பைப் புகுத்த முடியாது. சரியாகச் சொல்வதெனில், ஒரு மதிப்பு இருத்தும் கட்டளையில் (assignment statement) இடப்புறத்தில் PAI -ஐப் பயன்படுத்த முடியாது.

 குறியீட்டு மாறிலியின் வரையறுப்புகள்

ஒரு #define அறிவிப்பில் ஒரேயொரு மாறிலியை மட்டுமே குறிப்பிட முடியும். வெவ்வேறு மாறிலிகளுக்கு தனித்தனி #define அமைக்க வேண்டும்.

#define   TRUE       1
#define   FALSE      0
#define   TOP         100
#define   EOF         -1
#define   PERIOD   ‘.’
#define   NAME       “Sivalingam”

ஒரு #define அறிவிப்பில் உள்ள மாறிலியை அடுத்துவரும் #define அறிவிப்பில் பயன்படுத்திக் கொள்ளமுடியும்.

#define   START   100
#define   NEXT     START + 1

என்று பயன்படுத்த முடியும்.

#define கட்டளையில் int, char, string மதிப்புகளைத் தவிர unsigned, long மதிப்புகளையும், octal, hexa decimal மதிப்புகளையும் அறிவிக்க முடியும்.

#define   CR                 0x0D     /* hexa value 13 */
#define   LINE_FEED   012     /* octal value 12 */
#define   PORT             25U   /* unsigned value 25 */
#define   LIMIT             40000L /* long value 40000 */
#define   BELL             ‘\007’   /* character value 7 */
#define   NEW_LINE   ‘\n’      /* newline character */
#define   TAB               ‘\t’     /* tab character */

#define கட்டளையைப் பயன்படுத்தும்போது கருத்தில் கொள்ள வேண்டிய முக்கிய விவரங்கள்:

(1) main() ஃபங்ஷனுக்கு வெளியே புரோகிராமின் தொடக்கத்தில் அமைய வேண்டும்.

(2) #define கட்டளையின் இறுதியில் அரைப்புள்ளி கிடையாது.

(3) #define வரையறுப்பில் தரவினத்தைக் குறிப்பிட வேண்டிய தில்லை. மதிப்பினைக் கொண்டே கம்ப்பைலர் அடையாளம் கண்டு கொள்ளும்.

(4) ஒரு #define-ல் ஒரு மாறிலியை மட்டுமே வரையறுக்க முடியும்.

(5) மாறிலிகளின் பெயர்கள் எப்போதும் பெரிய எழுத்துகளில் இருப்பது மரபு.

 மதிப்புருக்கள் (Literals)

int n = 25;
char ch = ‘A’;
average = 12.345 / 6.0;
printf (“Welcome to C!”);

என்பது போன்ற கட்டளைகளில் இன்டிஜர், கேரக்டர், ஸ்ட்ரிங் மதிப்புகளைப் பயன்படுத்துகிறோம். இப்படிப்பட்ட மதிப்புகளை மாறா மதிப்பு (Constant Values) என்கிறோம். மாறிலி (Constant) என்று கூறினாலும் தவறில்லை. சில ஆசிரியர்கள் இவற்றை மதிப்புருக்கள் (Literals) என்று அழைக்கின்றனர். ஒவ்வொரு தரவினத்திலும் ஏற்கெனவே அட்டவணையில் கொடுக்கப்பட்ட வரம்புகளுக்குள் ஏதேனும் ஒரு மதிப்பை மாறியில் இருத்த முடியும் அல்லது கணக்கீட்டில் பயன்படுத்த முடியும். எடுத்துக்காட்டுகள்:

char        - ‘a’, ‘A’, ‘5’, ‘?’, ‘=’
int           - 25, 32767, 0, -8, +65, 037
long         - 0L, 25L, 100000L
unsigned - 0U, 65000U, 25U
octal        - 03, 012, 0345
hexa        - 0x01A, 0xFFF, 0Xf0ab
float         - 12.345F, 5.0F, -8.3F, +1.234F
double     - 12.345, 5.0, -8.3, +1.23, 1.23E+5, 1.234e-8
string       - “Kumar”, “Long Live”, “12345”

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

 const என்னும் பண்பேற்றி

புரோகிராமில் மாறிலிகளை அறிவிப்பதற்கு அன்சி-சி-யில் ஒரு புதிய முறை புகுத்தப்பட்டது. const என்னும் பண்பேற்றி (Qualifier) அறிமுகப்படுத்தப்பட்டது.

const float pai = 3.142;

என்று ஒரு மாறிலியை அறிவிக்கலாம். இங்கே pai என்பது float மாறி. const என்னும் அடைமொழியால் ஒரு மாறிலியாக மாற்றப்பட்டுள்ளது. இவ்வாறு const என்று அறிவித்துவிட்டால் புரோகிராமில் பின்னோர் இடத்தில்,

pai = 3.1415;

என்று புரோகிராமரே நினைத்தாலும் மாற்ற முடியாது. const என அறிவிக்கும்போது கட்டாயமாக அதில் ஒரு தொடக்க மதிப்பு இருக்க வேண்டும். அதாவது,

const float pai;

என்று அறிவிக்க முடியாது. AREA2.C புரோகிராமை const பயன்படுத்தி எழுதிப் பார்ப்போமா?

/* Program No. */
/* AREA3.C */
#include <stdio.h>
main()
{
      int radius;
      float area;
      const float pai = 3.14;
      printf(“\nEnter radius: “);
      scanf(“%d”, &radius);
      area = pai * radius * radius;
      printf(“Area of the circle is %f”, area);
}

இந்தப் புரோகிராமின் வெளியீடு முந்தைய புரோகிராமின் வெளியீடு போலவே இருக்கும். const அறிவிப்பில் ஒன்றுக்கு மேற்பட்ட மாறிலிகளை வரையறுக்க முடியும்.

const int start = 100, end = 200;
const char ch = ‘A’, int limit = 1000, float pai = 3.14;

மாறிலிகளை அறிவிக்கும் விதம் தொடர்பாக, மனதில் பதிய வைக்க வேண்டிய விவரங்களைத் தொகுத்துக் காண்போம்:

(1) மாறிலிகள் புரோகிராமின் தொடக்கத்திலேயே அறிவிக்கப்பட்டுவிட வேண்டும்.

(2) மாறிலிகளை #define அல்லது const என்ற முறையில் அறிவிக்கலாம்.

(3) #define அறிவிப்பில் மாறிலியின் பெயரும் அதன் மதிப்பும் இடம்பெற வேண்டும்.

(4) #define அறிவிப்பில் தரவு இனத்தைக் குறிப்பிட வேண்டிய தேவையில்லை. மதிப்புகளைக் கொண்டே தரவு இனத்தைக் கம்ப்பைலர் புரிந்து கொள்ளும்.

(5) #define, main()-க்கு வெளியே இடம்பெற வேண்டும்.

(6) #define அறிவிப்பின் இறுதியில் அரைப்புள்ளி கிடையாது.

(7) const அறிவிப்பில் தரவு இனத்தைக் குறிப்பிட வேண்டும்.

(9) ஒரு மாறிலியை const என அறிவிக்கும்போது கட்டாயமாக அதில் ஒரு தொடக்க மதிப்பை இருத்த வேண்டும். அந்த மதிப்பை புரோகிராமில் வேறு எங்கும் மாற்ற முடியாது.

(10) ஒரே const-ல் ஒன்றுக்கு மேற்பட்ட மாறிலிகளை அறிவிக்க முடியும்.

(11) மாறிகள் அல்லது மாறிலிகளில் இருத்தப்படும் மதிப்புகளும் எக்ஸ்பிரஷன்களில் பயன்படுத்தப்படும் மதிப்புகளும் மதிப்புரு (Literal) என்றும், சில வேளைகளில் மாறிலி (Constant) என்றும் அழைக்கப்படுவதுணடு.

இந்த வலையகத்தில்

இவ்வலையகத்தின் பக்கங்கள் இன்டர்நெட் எக்ஸ்புளோரர்-8, 1024 X 768 பிக்செல் திரைக்கேற்ப வடிவமைக்கப்பட்டுள்ளன
வலையக வடிவமைப்பு, உள்ளடக்கப் பதிப்புரிமை © 2009 மு.சிவலிங்கம்