சி (நிரலாக்க மொழி)

**சி நிரலாக்க மொழி** ('C' Computer Programming Language) என்பது கணினியில் பயன்படுத்தப்படும் ஒரு கணிமொழி. இது 1970 இல் அமெரிக்காவின் AT&T (அமெரிக்கத் தொலைத்தொடர்பு தொலைபேசி) ஆய்வுக்கூடத்தின் பிரையன் கேர்நிங்காம் (Brian Kernighan) மற்றும் டென்னிசு ரிச்சி (Dennis Ritchie) ஆகியோரால் உருவாக்கப் பட்டது.

தொடக்கத்தில் 1970இல் யுனிக்ஸ் இயங்குதளத்தில் மட்டுமே சி-மொழி இயங்கியது. பின்னர் ஏனைய இயங்குதளங்களிலும் இயக்கும் வசதியேற்பட்ட பின்னர் மிகப் பெருமளவில் பயன்படுத்தப்படும் நிரலாக்க மொழியாக மாறியது. புதிதாகக் கணினி பயில்பவர்களுக்கு ஏற்ற மொழியாக இல்லாவிடினும் மிக விரைவாக இயங்கியதால் கணினி இயங்குதளங்களை உருவாக்கவும் வேறு பயனுள்ள மென்பொருள்கள் உருவாக்கவும் இது பயன்படுத்தப்பட்டு வருகிறது.

## வரலாறு
### தொடக்க கால வளர்ச்சி
1969 க்கும் 1973 க்கும் இடையில் சி மொழியின் தொடக்க கால வளர்ச்சி நிகழ்ந்தது. டென்னிசு ரிச்சியின் கருத்துப்படி 1972 ஆம் ஆண்டில் தான் மிகமுக்கியமான வளர்ச்சிப்பணிகள் அமெரிக்காவின் AT&T பெல் ஆய்வுக்கூடத்தில் நடைபெற்றன. தொடக்கத்தில் BCPL (Basic Combimed Programming Lanaguage) ஐப் பின்பற்றி B என்னும் நிரலாக்கல் மொழி உருவாகியது. இதைத்தொடர்ந்து வந்த இம்மொழியின் பெயராக BCPL இல் இரண்டாவது எழுத்தான C ஐ எடுத்துக் கொண்டனர். பின்னர் ++ என்ற கூட்டல் குறியை இதன் வழிவந்த 'சி++' நிரலாக்க மொழிக்குச் சேர்த்துக் கொண்டனர்.

## எடுத்துக்காட்டு
கீழ்கண்ட நிரலை விண்டோசு/டாஸ் (தமிழ் வரியை விட்டுவிடவும்) இயங்குதளங்களில் செயல்படுத்திப் பார்க்கவும். லினக்சில் gedit எனக் கட்டளையிட்டுப் பின்னர் கோப்பைச் சேமிக்க இயலும். லினக்ஸ் இயங்குதளத்தில் உள்ளவர்கள் கடைசி வரியையும் தட்டச்சுச் செய்து சோதிக்கலாம்.


```c
#include <stdio.h>

 void main()
 {
         printf("This is a C program\n");
         printf("ஹலோ உலகமே \n")

 }
```


இங்கு #include   என்ற கட்டளை சி மொழியில் தலைப்புக் கோப்பு எனப்படும். இங்கு h தலைப்பைக் (header) குறிக்கின்றது. இங்கு stdio என்பது **St**andar**d** **I**nput **O**utputஆக கணினிகளில் தரவுகளை உட்புகுத்துதல் மற்றும் வெளியிடுதல் செயலுக்காகத் தலைப்புக் கோப்பைச் சேர்ப்பதாகும். பொதுவாக ஏற்றுக்கொள்ளப்பட நிரலாக்க முறையாக (கட்டாயம் என்றல்ல)  போன்ற  சி மொழியின் செந்தரக் கோப்புக்களாகும். #include "programmercreated.h" என்பது நிரலாக்கர் ஒருவர் உருவாக்கிய தலைப்புக் கோப்பொன்றை சேர்க்கும் வழிமுறையாகும். ரேபோ சி எனும் தொகுப்பி "நிரலர் உருவாக்கிய தலைப்புக் கோப்பு வரி ஒன்றைக் காண்கையில் முதலில் நிரலரின் இயங்கிக் கொண்டிருக்கும் கோப்புறையுள் இக்கோப்பினைத் தேடிவிட்டே பின்னர் நியமத் தலைப்புக் கோப்புள்ள இடத்தில் அதனைத் தேடும்.

main () இங்குள்ள முதன்மை செயற்கூறு (function) ஆகும். இங்கிருந்தே நிரலாக்கத்தின் செயற்பாடுகள் ஆரம்பிக்கும். இதில் void என்பது இயங்குதளத்திற்கு எதையும் திருப்பி அனுப்புவதில்லை என்பதாகும். மைக்ரோசாப்ட் தொகுப்பிகளான விசுவல் சி++ போன்றவை இதை int அதாவது இலக்கம் என்றவாறு எதிர்பார்த்து ஓர் எச்சரிக்கைச் செய்தியொன்றைத் தரும். இதைத் தவிர்க்க விரும்பினால் int main() என்றவாறு ஆரம்பித்து கடைசியாக } இற்கு முன்னால் return 0; என்று சேர்க்கலாம். இங்கே கவனிக்கவேண்டிய ஒன்று என்னவென்றால் பஸ்கால் நிரலாக்கல் மொழி (அல்லது பாஸ்கல்) போன்றல்லாமல் இங்கே ; அரைநிறுத்தற்குறியானது (செமிகோலன்) கூற்றுக்களை வேறாக்குவதால் (Statement Separator) அல்ல கூற்றுக்களை முடிவடைக்கும் கூற்றாகும் (Statement Terminator). பஸ்கால் மொழி main பக்ஷன் நிரலின் இறுதியில் அல்லாமல் நிரலின் எந்தப் பகுதியிலும் இருக்கலாம். நிரல் main பகுதியில் இருந்தே செயற்பட ஆரம்பிக்கும்.

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

{ செயற்பாட்டின் தொடக்கம்

printf() ஆனது **print** **f**untion ஆகும். இந்த நிரலின் வெளிப்பாடு *This is a C program* என்பதைக் கணினித் திரையில் காட்டும். இதில் \n எனது புதிய வரியைச் சேர்ப்பதாகும் (new line feed). எனவே நிரலை இயக்கியவுடன் cursor அடுத்த வரியில் வந்து நிற்கும்.

} செயற்பாட்டின் முடிவு

இப்போது நீங்கள் விண்டோஸ் அல்லது டாஸ் இயங்குதளத்தில் இருந்து ரேபோ சி கம்பைலரைப் பாவித்தால் F9 ஐப் பாவித்து நிரலை இயக்கலாம். லினக்ஸ் இயங்குதளங்களில் terminal இல் gcc -o desniation source.c என்றவுடன் கம்பைல் பண்ணும், இதைப் பின்னர் ./destination (உருவாக்கப்பட்ட Binary கோப்பு) என்றவாறு கொடுத்து terminal இல் இயக்கலாம்.

இந்த நிரலில் பெட்டி[stack] முறையில் சேமிக்கலாம்.


```c
#include <stdio.h>
#include <ctype.h>
#include <math.h>
#define MAX 100
int top=-1;
int stack_arr[MAX];
int main()
{
	register int choice;
	void push(),pop(),display();
	while(1)
	{
		printf(" இந்த நிரலில் பெட்டி[stack]  முறையில் சேமிக்கலாம். உங்கள் தேர்வை கொடுக்க \n ");
		printf("1.ஏற்று\n 2.நீக்கு\n 3.காண்பி\n 4.மூடு\n\n உங்கள் தேர்வு [1 - 4]: ");
		scanf("%d",&choice);
		switch(choice)
		{
		case 1:
			push();
			break;
		case 2:
			pop();
			break;
		case 3:
			display();
			break;
		case 4:
			break;
		default:
			printf("தவறான தேர்வு \n" );
			break;
		}
	}
	return 0;
}
void push()
{
	register int pitem;
	if(top==(MAX-1))
		printf("பெட்டியில் இடமில்லை \n");
	else
	{
		printf("ஏற்ற வேண்டிய பொருளை கொடுக்க : ");
		scanf("%d",&pitem);
		top=top+1;
		stack_arr[top]=pitem;
		printf("பொருள் ஏறிற்று \n" );
	}
}
void pop()
{
	register int temp;
	if(top==-1)
		printf("பெட்டி காலி \n");
	else
	{
		printf("நீக்கபட்ட பொருள் : %d \n",stack_arr[top]);
		temp=stack_arr[top];
		top=top-1;
	}
}
void display()
{
	register int i;
	if(top==-1)
	{
		printf("பெட்டி காலி \n");
	}
	else
	{
		printf("பெட்டி பொருள்கள் :  \n");
		for(i=top;i>=0;i--)
			printf("%d \n",stack_arr[i]);
	}
}
```


## உசாத்துணை

## வெளி இணைப்புகள்
### பயிற்சிகள்
* விக்கி நூல்கள் தளத்தில் . 
* Everything You Ever Wanted to Know about C Types 
* C Programming  (course at University of Strathclyde Computer Centre) 
* The C Book by M.Banahan-D.Brady-M.Doran (Addison-Wesley, 2nd ed.) — A very interesting and complete book for beginners/intermediate, now off-print and free. 
* C Unleashed  by Richard Heathfield and others contributors in comp.lang.c (Sams) — An interesting book about advanced ISO-C. 
* Essential C — Short C guide, great for programmers new to C. 
* Everything you need to know about pointers in C. 

### வளங்கள்
* சி-மொழிப் பாடங்கள் 
* சி-மொழிப் பாடங்கள் 
* C பற்றிய எண்ணங்கள் இலவச மின்னூல் .  
* சி மொழியின் அடிப்படைத் தத்துவங்கள் . 
* ISO C Working Group (அதிகாரப்பூர்வத்தளம்) 
* comp.lang.c அடிக்கடி கேட்கப்படும் வினாக்கள்.  
* comp.lang.c Wiki.  
* GNU C Library documentary (மூல நிரல்களை பதிவிறக்கலாம்)  
* Programming in C (document collection at Lysator)  
* ''The New C Standard: An economic and cultural commentary'' —  "detailed analysis of the International Standard for the C language. (PDF)" பற்றிய இன்னும் பதிக்கப்படாத புத்தகம்.  
* போர்லாண்ட் ரேபோ C இலவசப் பதிவிறக்கம்.  

### Optimization techniques
* Programming Optimization
* C optimization tutorial 
* International Obfuscated C Code Contest

### C99
* The current Standard (C99 with Technical corrigenda TC1 and TC2 included) – in PDF
* Open source development using C99 — Is your C code up to standard? by Peter Seebach
* Are you Ready For C99?

### உதவி
* C மன்றம் Cprogramming.com ல்
* C and C++ டானி வெப்பில்

### வரலாறு
* ''சி மொழியின் விருத்தி'' டெனிஸ் எம். ரிட்சி ஆல் எழுதப்பட்டது

## மேற்கோள்கள்

பகுப்பு:பணிமுறை நிரலாக்க மொழிகள்
பகுப்பு:நிரல் மொழிகள்
பகுப்பு:அமெரிக்கக் கண்டுபிடிப்புகள்
பகுப்பு:பல்லியக்குதள மென்பொருட்கள்