സി പ്രോഗ്രാമിങ്ങ്
ആമുഖം
തിരുത്തുകഒരു രീതി-അധിഷ്ഠിത (procedure-oriented), പൊതു ഉപയോഗ (general purpose) പ്രോഗ്രാമിങ് ഭാഷയാണ് സി (C Programming Language). 1972-ൽ ബെൽലാബിലെ ഡെന്നിസ് റിച്ചിയാണ് സി വികസിപ്പിച്ചെടുത്തത്. അദ്ദേഹം തന്നെ വികസിപ്പിച്ച യുണിക്സ് ഓപ്പറേറ്റിങ് സിസ്റ്റത്തിൽ ഉപയോഗിക്കാനായിരുന്നു സി നിർമ്മിക്കപ്പെട്ടത്. സിയുടെ വികസന കാലം മുതലിങ്ങോട്ട് ഒരുപാട് പ്രോഗ്രാമിങ് ഭാഷകളെ സ്വാധീനിക്കാൻ ഇതിനായിട്ടുണ്ട്. ഏറ്റവും ജനപ്രീതി നേടിയ പ്രോഗ്രാമിങ് ഭാഷ എന്ന സ്ഥാനവും സി നേടിയെടുത്തു.[അവലംബം ആവശ്യമാണ്] ഇന്നും സിസ്റ്റം, ആപ്ലിക്കേഷൻ പ്രോഗ്രാമിങ് രംഗത്ത് സി ഉപയോഗിക്കപ്പെട്ടുവരുന്നു.
സി സിസ്റ്റം നിർമ്മിക്കാനായി ഉപയോഗിക്കുന്ന ഒരു രീതി-അധിഷ്ഠിത പ്രോഗ്രാമിംഗ് ഭാഷയാണ്. താരതമ്യേന ലളിതമായ ഒരു കമ്പൈലർ ഉപയോഗിച്ച് സമാഹരിക്കുക (compiling), മെമ്മറിയിലേക്ക് താഴ്ന്ന തലത്തിലുള്ള പ്രവേശനം (low level access) ലഭ്യമാക്കുക, മെഷീൻ ഇൻസ്റ്റ്റക്ഷനുകളിലേക്ക് സമർത്ഥമായി സമ്മേളിക്കുവാൻ പറ്റിയ ഭാഷാഘടകങ്ങൾ (language constructs), ഏറ്റവും കുറച്ചു റൺ-സമയ പിന്തുണ (run-time support)- ഇവയാണ് സിയുടെ രൂപകല്പനയിലെ ലക്ഷ്യങ്ങൾ. അതുകൊണ്ട് തന്നെ അസെംബ്ലി ഭാഷയ്ക്ക് പകരമായി പല സാഹചര്യങ്ങളിലും സി ഉപയോഗിക്കാം.
ഒരു യന്ത്ര-സ്വതന്ത്ര പ്രോഗ്രാമിംഗ് ഭാഷ (machine-independent) കൂടിയാണ് സി. നന്നായി എഴുതിയ ഒരു സി പ്രോഗ്രാമിനെ വളരെ കുറച്ചു മാറ്റങളോടെയോ മാറ്റങ്ങൾ ഇല്ലാതെ തന്നെയുമോ പല കമ്പ്യൂട്ടർ പ്ലാറ്റ്ഫോമുകളിലും ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങളിലും സമാഹരിക്കാൻ (compile) സാധിക്കും.
സവിശേഷതകൾ
തിരുത്തുകസിയുടെ പൂർവ്വികന്മാരെ അപേക്ഷിച്ച് ശക്തവും ലളിതവുമായ സിന്റാക്സാണ് ഇതിന്റെ ഏറ്റവും വലിയ സവിശേഷത. ഏതാണ്ട് മുപ്പതോളം മാത്രം വരുന്ന നിർദ്ദേശ വാക്കുകൾ (Keywords) ഉപയോഗിച്ചാണ് സിയിൽ പ്രോഗ്രാമുകൾ എഴുതുന്നത്. ഈ പ്രോഗ്രാമുകൾ യന്ത്രഭാഷയിലേക്ക് (Machine Language) മാറ്റുമ്പോൾ സി ഏറ്റവും കുറവ് യന്ത്രഭാഷാ നിർദ്ദേശങ്ങളേ ഉപയോഗിക്കുന്നുള്ളു. ഇതിന്റെ ഫലമായി നിർമ്മിക്കപ്പെടുന്ന പ്രോഗ്രാമിന് വേഗത കൂടുതലായിരിക്കും.
കമ്പ്യൂട്ടർ പ്രോഗ്രാമിന്റെ അടിസ്ഥാന ഘടകങ്ങളിലൊന്നായ ഡേറ്റാ സ്ട്രൿചറുകൾനിർമ്മിക്കുവാനും ഉപയോഗിക്കുവാനും ഈ ഭാഷയിൽ എളുപ്പത്തിൽ സാധിക്കും. കമ്പ്യൂട്ടർ മെമ്മറിയുടെ ഏറ്റവും ഫലവത്തായ ഉപയോഗവും സിയുടെ സവിശേഷതയാണ്.
സി ഒരു പോർട്ടബിൾ ഭാഷയാണ്. അതായത്, സിയുടെ തനത് നിർദ്ദേശക്കൂട്ടങ്ങൾ ഉപയോഗിച്ച് എഴുതിയ ഒരു പ്രോഗ്രാം മറ്റു പ്ലാറ്റ്ഫോമുകളിലേക്ക് എളുപ്പത്തിൽ മാറ്റാൻ സാധിക്കും (ഉദാഹരണത്തിന്, വിൻഡോസ് ഓപ്പറേറ്റിങ് സിസ്റ്റത്തിൽ നിന്നും യൂണിക്സിലേക്കും തിരിച്ചും). ഇതിന് മാറ്റുവാനുദ്ദേശിക്കുന്ന പ്ലാറ്റ്ഫോമിന് അനുയോജ്യമായ കംപൈലർ പ്രോഗ്രാമുകൾ ആവശ്യമാണ്. ഇന്ന് ഏതാണ്ടെല്ലാ പ്ലാറ്റ്ഫോമിലും ഉപയോഗ്യമായ സി കംപൈലർ പ്രോഗ്രാമുകൾ നിർമ്മിക്കപ്പെട്ടിട്ടുണ്ട്.
- നെസ്റ്റിങ് (ഒന്നിന്റെ ഉള്ളിൽ മറ്റൊന്നിനെ ഉൾപ്പെടുത്തുക അനുവദിക്കാത്ത function നിർവചനങ്ങൾ.
- പകുതി ദുർബലമായ തരംതിരിക്കൽ (weak typing). ഉദാഹരണത്തിന് ക്യാരക്ട്രർ variables integers ആയും ഉപയോഗിക്കാം.
- തരംതിരിച്ച (typed) പോയിന്ററുകളെ യന്ത്ര വിലാസങ്ങളിലേക്ക് മാറ്റുന്നതിനായി താഴ്ന്ന തലത്തിലുള്ള മെമ്മറി പ്രവേശനം
- പോയിന്റർ കണക്കു പ്രകാരം നിർവചിച്ചിരിക്കുന്ന അറെ (array) ഇൻഡ്ക്സുകൾ.
- മാക്രൊ നിർവചനത്തിനു വേണ്ടി പ്രിപ്രോസസ്സർ, സോഴ്സ് കോഡ് ഉൾപ്പെടുത്താനുള്ള സൗകര്യം, നിബന്ധനകൾക്ക് വിധേയമായിട്ടുള്ള സമാഹരണം (conditional compilation).
- 30 കീവേഡുകൾ
ചരിത്രം
തിരുത്തുക1969-1972 കാലഘട്ടത്തിലാണ് സിയുടെ നിർമ്മാണത്തിന് തുടക്കമിട്ടത്. സിയുടെ നിർമ്മാണഘട്ടത്തിൽ അക്കാലത്തുണ്ടായിരുന്ന ‘ബി’ എന്ന പേരിലറിയപ്പെട്ടിരുന്ന മറ്റൊരു പ്രോഗ്രാമിങ് ഭാഷ നിർണ്ണായക സ്വാധീനം ചെലുത്തിയിട്ടുണ്ട്. ഇതിനാലാണത്രെ താൻ നിർമ്മിച്ച പുതിയ ഭാഷയ്ക്ക് ‘സി’ എന്ന പേരിടാൻ ഡെന്നിസ് റിച്ചിയ്ക്ക് പ്രചോദനമായത്. ഇംഗ്ലീഷ് അക്ഷരമാലയിൽ ‘ബി’ കഴിഞ്ഞ് ‘സി’ ആണല്ലൊ വരുന്നത്.
യുണിക്സ് ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റത്തിന്റെ നിർമ്മാണവുമായി സിയുടെ തുടക്കത്തിന് ബന്ധമുണ്ട്. യുണിക്സ് യഥാർത്ഥത്തിൽ പിഡിപി-7 കമ്പ്യൂട്ടരിനു വേണ്ടി കെൻ തോംസണും ഡെന്നിസ് റിച്ചിയും ചേർന്ന് അസെംബ്ലി ഭാഷയിൽ വികസിപ്പിച്ചെടുത്തതാണ്. അത് പിഡിപി-11ലേക്ക് പോർട്ട് ചെയ്യാനായി ബി ഉപയോഗിച്ചപ്പോൾ, ബിയുടെ പല പരിമിതികളും അവർ മനസ്സിലാക്കി. ഇത് സിയുടെ ആദ്യകാല വികസനത്തിന് വഴിതെളിച്ചു.
1973 ആയപ്പോഴേക്കും യുണിക്സ് കെർണൽ മുഴുവനായി സിയിൽ മാറ്റി എഴുതപ്പെട്ടിരുന്നു. അങ്ങനെ അസെംബ്ലി ഭാഷയിലല്ലാതെ എഴുതപ്പെടുന്ന ആദ്യ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റ്ങ്ങളിൽ ഒന്നായി യുണിക്സ് മാറി.
- ആൻസി സി (ANSI C)
സി ഭാഷ ഒട്ടേറെ തവണ പരിഷ്കരിക്കപ്പെട്ടിട്ടുണ്ട്. 1970 അവസാനമായപ്പോഴേക്കും മൈക്രോകമ്പ്യൂട്ടറുകളിലെ പ്രോഗ്രാമിംഗ് ഭാഷ എന്ന നിലയിൽ ബേസിക്(BASIC) ഭാഷയെ സി കടത്തി വെട്ടിയിരുന്നു. 1980-കളിൽ IBM കമ്പനി തങ്ങളുടെ ആവശ്യങ്ങൾക്കായി സി ഭാഷയെ തിരഞ്ഞെടുത്തു. സിയുടെ വർദ്ധിച്ചു വരുന്ന ഉപയോഗം കണക്കിലെടുത്ത് 1983-ൽ സി ഭാഷയെ ഏകീകരിക്കുക എന്ന ലൿഷ്യത്തോടെ അമേരിക്കൻ നാഷനൽ സ്റ്റാൻഡേർഡ്സ് ഇൻസ്റ്റിറ്റ്യൂട്ട് ഒരു കമ്മിറ്റി രൂപവൽക്കരിച്ചു. ഈ കമ്മിറ്റി ഏകീകരിച്ച സി ഭാഷയുടെ പതിപ്പാണ് ആൻസി സി (ANSI C) എന്ന പേരിലറിയപ്പെടുന്നത്.
സിന്റാക്സ്
തിരുത്തുകകീ വേഡുകൾ
തിരുത്തുകC89ന് 32 കീവേഡുകൾ ഉണ്ട് (പ്രത്യേക അർത്ഥം കല്പിച്ചിരിക്കുന്ന വാക്കുകൾ):
auto |
double |
int |
struct
|
break |
else |
long |
switch
|
case |
enum |
register |
typedef
|
char |
extern |
return |
union
|
const |
float |
short |
unsigned
|
continue |
for |
signed |
void
|
default |
goto |
sizeof |
volatile
|
do |
if |
static |
while
|
C99 ന് 5 കീവേഡുകൾ കൂടിയുണ്ട്
_Bool |
inline
|
_Complex |
restrict
|
_Imaginary |
C11 ൽ 7 കീവേഡുകൾ കൂടി കൂട്ടിച്ചേർത്തു:
_Alignas |
_Generic |
_Static_assert
|
_Alignof |
_Noreturn |
_Thread_local
|
_Atomic
|
ആദ്യ പ്രോഗ്രാം
തിരുത്തുക#include <stdio.h>
int main(void)
{
printf("hello, world\n");
return 0;
}