C (ක්‍රමලේඛන භාෂාව)

ćපරිගණක විද්‍යාවේ දී, C (, C අකුර ශබ්ද කරන අයුරින්) යනු පොදු කාර්ය පරිගණක භාෂාවක් වන අතර, මෙය ලොවට හඳුන්වාදුන්නේ 1969-1979 කාලය අතර AT&T බෙල් පර්යේෂණාගාරයේ දී ඩෙනිස් රිචී මහතා විසිනි. ALGOL සම්ප්‍රදායේ පවතින බොහෝ විධානාත්මක භාෂා වල මෙන්, C පරිගණක භාෂාවද ස්තිථික ටයිප් පද්ධති, බොහෝ අපෙක්ෂා නොකල කාරකයන් වළක්වද්දීත් ව්‍යූහාත්මක වැඩසටහන්කරණයට පහසුකම් සැළසීම සහ lexical විචල්‍ය අවකාශයකට හා සහානුයාත වලට ඉඩදීම සිදු කරයි. C භාෂාවේ ප්‍රභව කේතයන් නිදහස් ආකෘතියක් ගන්නා අතර වැකි අවසන් කිරීමට තිත් කොමාව(;) ද වැකි කාණඩගත කිරීමට සඟල වරහන ද භාවිතා කරයි. එහි පවතින සැකැස්ම නිසා කාර්යක්ෂමව වැඩසටහනක ඇති අංගයන් ඊට අදාළ යන්ත්‍ර උපදෙස් වලට ඈඳීම කල හැකි අතර එම නිසා Unix පරිගණක මෙහෙයුම් පද්ධතියේ අඩංගු පද්ධති මෘදුකාංග වැනි Assembly පරිගණක භාෂාව භාවිතයෙන් ලියන ලද වැඩසටහන් පවා දිගින් දිගටම භාවිතා කිරීමට හැකියාව ලැබී ඇත.

C යනු මෙතෙක් ලොව වැඩියෙන්ම භාවිතා කර ඇති පරිගණක භාෂාව වන අතර C භාෂාව සඳහා භාෂා පරිවර්තකයක් දක්නට නොමැත්තේ ඉතා අඩු පරිගණක ආකෘතීන් කිහිපයක පමණකි.

C#, D, Go, Java, JavaScript, Limbo, LPC, Perl, PHP, Python, සහ Unix's C shell වැනි බොහෝ පසු කාලීන පරිගණක භාෂාවන් C පරිගණක භාෂාවේ ආභාෂය සෘජුව හෝ වක්‍රව ලබා ඇත. මෙවැනි භාෂාවල (Python භාෂාවේ හැර) වැඩිපුරම දක්නට ලැබෙන C භාෂාවේ බලපෑම් වන්නේ ඒවා සරල ආකෘතීමය රීතීන් වශයෙන් පැවතීම (syntactical) සහ C භාෂාවේ පවතින හඳුනාගන්නා ලද ප්‍රකාශනයන් හා වගන්ති ආකෘතීන් (syntax of C), බොහෝ විට වෙනස් විය හැකි මූලික type පද්ධති, දත්ත ආකෘතීන් හා අර්ථවිචාර සමග සංයුක්ත කිරීමට නැඹුරු වීමයි. C++ පරිගනක භාෂාව C භාෂාවේ පෙර සැකසුම් එකතුවක් වශයෙන් ආරම්භ වූ අතර වර්තමානය වන විට එය C භාෂාවේ මව් කුලකයක් (superset) ලෙස පවතී.

C භාෂාව සඳහා නිල ප්‍රමිතියක් තිබීමට ප්‍රථම ඩෙනිස් රිචී සහ බ්‍රයන් කර්නගෙන් විසින් රචිත අවිධිමත් පිරිවිතරක් මත බොහෝ භාවිතාකරන්නන් සහ ක්‍රියාවටනංවන්නන් විශ්වසය තබා තිබින. එම පිරිවිතර “K&R” C ලෙස හඳුන්වන ලදි. 1989 දී ඇමරිකානු ජාතික ප්‍රමිති ආයතනය C භාෂාව සඳහා ප්‍රමිතියක් ප්‍රකාශයට පත් කල අතර එය “ANSI C” හෝ C89 ලෙස හැඳින්වේ. ඉනික්බිති වර්ෂයේදී එම පිරිවිතරම ප්‍රමිතිකරණය සඳහා වන ජාත්‍යන්තර ආයතනය (ISO) අන්තර්ජාතික ප්‍රමිතියක් ලෙස (ව්‍යවහාරයේදී C90) ප්‍රකාශයට පත් කරන ලදි. 1995 දී ISO ව විසින් පසුව එම ප්‍රමිතියේ අන්තර්ජාතික සහයෝගීතවය උදෙසා තවත් දිගුවක් නිකුත් කරන ලදි. මෙම ප්‍රමිතිය 1999 දී සංශෝධනය කරන ලදි (ව්‍යවහාරයේදී C99). වර්ථමානයේදී භාවිතා කරන්නේ 2011 දෙසැම්බරයේ සම්මත කරන ලද C11 නම් ප්‍රමිතියයි.

 සැලැස්ම 
C යනු විධානත්මක (පටිපාටිගත / procedural) භාෂාවකි. එය සැළසුම් කර ඇත්තේ එහි භාෂා පරිවර්තන කාර්යය සාපේක්ෂ වශයෙන් සරලව සිදුවීමටත්, පහළ මට්ටමේ (දෘඩාංග මට්ටමේ) පරිගණක මතක භාවිතයක් ලබාදීමටත්, කාර්යක්ෂමව වැඩසටහන් අන්තර්ගතයන් යාන්ත්‍රික භාෂාවේ උපදෙස් සමඟ ඈඳීමට හැකිවන පරිදිත් සහ අඩු ධාවන කාලයකින් වැඩසටහන් ක්‍රීයාත්මක වන පරිදිත් වේ. එහෙයින් C භාෂාව, පෙරාතුව assembly භාෂාවෙන් කේතනය කරන ලද පද්ධති වැඩසටහන් වැනි වැඩසටහන් සඳහා ප්‍රයෝජනවත් වේ. 

දෘඩාංග මට්ටමේ වැඩසටහන්කරණ හැකියාවන් තිබියදීත් මෙම භාෂාව cross-platform වැඩසටහන්කරණය කිරීමට හැකිවන පරිදිද නිර්මාණය කර ඇත. ප්‍රමිතීන්ට අනුකූලව හා පද්ධතියෙන් පද්ධතියට ගෙනයාමේ අදහසින් ලියන ලද C වැඩසටහන් විවිධ වෙනස්කම් සහිත මූලික තලයන් (platform) හා මෙහෙයුම් පද්ධති ඉතා ඉහළ පරාසයක් සඳහා ප්‍රභව කේතයේ සුළු වෙනස්කම් සිදුකිරීම මඟින් පරිවර්තනය කල හැක. මෙම භාෂාව පරිපත තුල එබ්බවූ ක්ෂුද්‍ර පාලක (embedded microcontrollers) සිට සුපිරි පරිගණක දක්වා වූ ඉතා ඉහළ පරාසයක මූලික තලයන් (platform) රැසක් සඳහා භාවිතා කල හැකිය.

 ලක්ෂණ 
ALGOL සම්ප්‍රදායට අයිති බොහෝ විධානාත්මක භාෂා වල මෙන් C භාෂාවේද ස්තිථික type පද්ධති බොහෝ අදහස් නොකරන ලද කාරකයන් වලක්වද්දීත් ව්‍යුහාතමක වැඩසටහන්කරණය සහ lexical විචල්‍යය කාණ්ඩ හා සහානුයාත (recursion) දැකිය හැක. C භාෂාවේදී සියලුම ක්‍රියාත්මක වන කේතයන් වෙන වෙනම හඳුන්වා දෙන ලද මාර්ග (subroutines) තුල පවතී. එම කොටස්  “කාර්යයන්”  (functions) ලෙස හඳුන්වන අතර ඒවා කෘත්‍යාත්මක වැඩසටහන්කරණයේ (functional programming) දැක්වෙන කාර්යයන් තරම් දැඩි අදහසක් නොදරයි. කාර්යයන් සඳහා වන පරාමිතීන් සෑමවිටම අගයන් මඟින් ලබාදීම සිදුකරයි. සමුද්දේශ භාවිතයෙන් වන පරාමිතික ලබාදීම් (pass­by­reference) සූචක (pointers) අගයන් භාවිතයෙන් සිදුකරයි.

C භාෂාව පහත දැක්වෙන ලක්ෂණ වලින් සමන්විත වේ.
 මූලික ගැලීම් පාලකයන් වන for, if/else, while, switch, සහ do/while යන ඒවාත් ඇතුලත්ව මුලපද (keywords) නිශ්චිත කුඩා ප්‍රමාණයක් පවතී. මූලිකව එක් නාම අවකාශයක් (namespace) පමණක් ඇති අතර භාවිතා කරන්නන් සාදන ලද නාම කිසිම අයුරකින් පවතින මුලපද වලට සමාන නොවිය යුතුය
 +, +=, ++, &, ~ වැනි ගණිතමය හා තාර්කික කාරකයන් විශාල ප්‍රමාණයක් පවතී.
 එක් වගන්තියක් තුලදී ආදේශයන් එකකට වඩා වැඩි ගණනක් සිදුකල හැක.
 කාර්යයන් මඟින් පිටතට නිකුත් කරන අගයන් අනවශ්‍යය අවස්තා වලදී නොසලකා හැරිය හැක. එනම් එම අගයන් භාවිතා කිරීම අනිවාර්යය නොවේ.
 ස්තිථික, අඩු වශයෙන් බලාත්මක වර්ගයන් (typing) පවතී. එනම් සියලුම දත්ත වලට දත්ත වර්ගයක් පවතින අතර අවශ්‍යය අවස්තා වලදී වර්ගය මාරු කොට භාවිතා කල හැක. උදාහරණයක් ලෙස අකුරක් සංඛ්‍යාවක් ලෙස භාවිතා කල හැකිය.
 ආකෘතීන් අර්ථ දැක්වීම පහසුය. එනම් අර්ථ දැක්වීමක් ඉදිරිපස “define” යනුවෙන් මුලපදයක් නොයොදයි. තවද කාර්යයක් අර්ථ දැක්වීමේදී “function” යනුවෙන් මුලපදයක් නොයොදන අතර කාර්යයන් පරාමිතීන් සමූහය දැක්වීමට භාවිතාකරන වරහන් මඟින් හඳුනාගනු ලබයි.
භාවිතා කරන්නන් මඟින් හඳුන්වා දෙනු ලබන වර්ගයන් (typedef) සහ සංයුක්ත වර්ගයන් භාවිතා කිරීමට හැකිය.
විෂමජාතීය සමූහ දත්ත වර්ග (struct) භාවිතා කල හැකි අතර එලෙස සකස් කරන ලද දත්තයන් ඒකක ලෙස භාවිතා කිරීම සිදු කරයි.
ආරාවන් අංකනය කිරීම සූචක ගණිතයේ සඳහන් වන පරිදි සිදුවන ද්විතීයක අංකනයකි. විෂම ජාතීය සමූහ දත්ත වර්ග මෙන් නොව ආරාවන් මූලික වස්තූන් (fist-class objects) ගණයට අයත් නොවේ. එනම් ඒවා භාවිතා කිරීම හෝ ඒවාට ආදේශ කිරීම තනි නිර්මිත කාරකයක් (built-in operator) භාවිතයෙන් සිදු කල නොහැක. අර්ථ දැක්වීමේදී Array යනුවෙන් මුලපදයක් භාවිතා නොකරන අතර කොටු වරහන මඟින් ආකෘතීමය වශයෙන් ආරවක් දක්වනු ලබයි. උදා. month[11]
Enumerated වර්ගයන් භාවිතා කල හැකි අතර එය enum මුලපදය මඟින් අර්ථ දක්වයි. ඒවා නිඛිල සමඟ අන්තර් පරිවර්තනය සිදුකල හැකි පරිදි නිදහස්ව පවතී.
String යනුවෙන් වෙනම දත්ත වර්ගයක් නොමැති නමුත් එය ශුන්‍යය අකුරකින් අවසන් වන අකුරු ආරාවක් මඟින් නිරූපණය කල හැක.
දෘඩාංග මට්ටමේ පරිගණය මතක භාවිතය පරිගණය මතකයේ යාන්ත්‍රික ලිපින, සූචක මඟින් පරිහරණය කල හැකි වන පරිදි පරිවර්තනය කිරීම තුලින් සිදුකරයි.
කාර්යය පටිපාටි (procedures) එනම් අගයන් භාහිරට නිකුත් නොකරන කාර්යයන් void නිකුතු වර්ගය භාවිතයෙන් අර්ථ දක්වයි. void යනු untyped නිකුතු වර්ගයකි. එනම් වර්ගයක් නොමැති නිකුතු වර්ගයකි.
කාර්යයන් වෙනත් කාර්යයන්ට අයත් lexical පරාසය  තුල අර්ථ දැක්වීම සිදුකල නොහැක.
පෙර සැකසුම් මඟින් macro අර්ථ දැක්වීම (defines), භාහිර කේත ගොනු ඈදීම (includes) සහ තාර්කික පරිවර්තනයන් (if def) සිදුකිරීම යන දෑ සිදුකරයි.
මූලික මොඩියුල භාවිත ආකාරයන්: static සහ extern ගුණාංග භාවිතයෙන් කේත ගොනු වෙනම පරිවර්තනය කර C වැඩසටහන් සමඟ ඈදිය හැකිය. එවිට ඒවායේ අන්තර්ගත කාර්යයන් සහ දත්ත වස්තූන් වැඩසටහන තුල භාවිතා කල හැකි වේ.
ආදාන / ප්‍රතිදාන, අකුරු සමූහ භාවිතය, සහ ගණිතමය ශ්‍රිත වැනි සංකීර්ණ ක්‍රියාවන් C භාෂාව තුල ඇති කලින් ලියන ලද කේතයන් හෝ භාහිරින් ලබා ගත් එවැනි කේතයන් භාවිතයෙන් සිදුකරනු ලබයි.

C භාෂාව තුල පරිගණක වැඩසටහන්කරණයට අලුතින් එක් වූ වස්තු මූලික වැඩසටහන්කරණ සංකල්පයන් (OOP Concepts) වැනි නූතන ඉහල මට්ටමේ භාෂාවන් වල ඇති ගුණාංග සමහරක් අන්තර්ගත නොවේ.

 ඉතිහාසය 

 මුල් ප්‍රවර්ධනයන් 

C භාෂාවේ ආරම්භක ප්‍රවර්ධනයන් 1969 – 1973 අතර කාලයේ දී AT&T බෙල් පර්යේෂණාගරයේදී සිදුවිය. 1975 වර්ෂය මෙම ප්‍රවර්ධනයන්ගේ වඩාත්ම නිර්මාණශීලී අවධිය ලෙස රිචී විසින් හඳුන්වයි. මෙම භාෂාව C නමින් හැඳින්වූයේ එහි ගුණාංග B නම් වූ පෙර පැවති භාෂාවකින් සම්භවය ලබා ඇති නිසාවෙනි. කෙන් තොම්සන් ට අනූව නම් C භාෂාව BCPL පරිගණක භාෂාවේ ලඝු කොට තැනූ සංස්කරණයකි.

තම සගයන් කිහිප දෙනුකුගේද අදහස් මත PDP-7 මත ක්‍රියාත්මක වූ assembly භාෂාවෙන් ලියන ලද Unix මෙහෙයුම් පද්දතියේ ප්‍රවර්ධනයන් සමඟ C භාෂාවේ සම්භවය තදින් බැඳී තිබිනි. අවස්ථානුකූලව ඔවුන් මෙහෙයුම් පද්ධතිය PDP-11 මතට ගෙන යන ලදි. මතකය බයිට් කොටස් වශයෙන් භාවිතා කිරීමට නොහැකි වීම වැනි PDP-11 හි පැවති සමහර වාසිසහගත ගුණාංග භාවිතා කිරීමට B භාෂාවට නොහැකි වූ බැවින් C භාෂාවේ මුල්ම සංස්කරණයන් ප්‍රවර්ධනය කිරීමට තීරණය කෙරින.

Unix මෙහෙයුම් පද්ධතියේ නියම PDP-11 සංස්කරණය assembly භාෂාව භාවිතයෙන් සිදු විය. 1973 දී struct වර්ගයන් C භාෂාවට එකතු වීමත් සමඟ Unix කර්නලය නැවත C භාෂාවෙන් ලිවීමට තරම් භාෂාව ප්‍රභල විය. මෙය ලොව මුල්ම assembly නොවූ පරිගණක භාෂාවක් භාවිතා කොට සකස් කරනු ලැබූ මෙහෙයුම් පද්ධති කර්නලය වේ.

 K&R C 
1978 දී බ්‍රයන් කර්නගාන් සහ ඩෙනිස් රිචී දෙදෙනා විසින් The C Programming Language නම් ග්‍රන්ථය මුල්ම සංස්කරණය ප්‍රකාශයට පත් කරන ලදි. පරිගණය වැඩසටහන්කරුවන් අතර K&R නමින් ප්‍රචලිත වූ මෙය බොහෝ කලක් යන තෙක්ම C භාෂාව සඳහා වූ අවිධිමත් පිරිවිතරක් ලෙස භාවිතා කර ඇත. මෙම ග්‍රන්ථයේ සඳහන් වන C සංස්කරණය K&R C ලෙස සාමන්‍ය ව්‍යවහාරයේ දී හැඳින්වේ. මෙහි දෙවන සංස්කරණය ANSI C ප්‍රමිතීන් ආවරණය වන පරිදි රචනා කර ඇත.

 ANSI C සහ ISO C 

1970 සහ 1980 අග භාගයන් වලදී mainframe පරිගණක, mini පරිගණක සහ IBM PC ද ඇතුළු ක්ෂුද්‍ර පරිගණක සඳහා වූ ඉල්ලුම ඉහල ගිය අතර ඉහල පරාසයක වෙනස්කම් සහිත එම පරිගණක සඳහා ද C භාෂාවේ සංස්කරණයක් නිර්මාණය කරන ලදි.

1983 දී C සඳහා ප්‍රමිති පිරිවිතරක් පිහිටු වීමට X3J11 නමින් කමිටුවක් ඇමරිකානු ජාතික ප්‍රමිති ආයතනය විසින් පත් කලේය. කමිටුව මඟින් Unix නිර්මිතයන් සඳහා භාවිතා කල C භාෂාව සඳහා ප්‍රමිතියක් නිර්මාණය කලේය . එසේ වුවත් Unix හි C පුස්ථකාලයේ අඩංගු විවිධ පද්ධතීන් සමඟ ඈඳිය නොහැකි කොටස 1003 IEEE සේවා කාණ්ඩයට භාර දෙන ලදි. එහි අරමුණ වූයේ 1988 POSIX ප්‍රමිතීන් නිර්මාණය කිරීමයි. 1989 දී ANSI X3.159-1989 “C පරිගණක භාෂාව” නමින් C ප්‍රමිතිය ස්ථීර කරන ලදි. C භාෂාවේ මෙම සංස්කරණය ANSI C, ප්‍රමිතිකරණය කල C හෝ සාමන්‍ය ව්‍යවහාරයේ දී C89 ලෙසත් හඳුන්වයි.

1990 දී ANSI C ප්‍රමිතිය ආකෘතිමය වෙනස්කම් සහිතව අන්තර්ජාතික ප්‍රමිති ආයතනය විසින් ප්‍රමිතිකරණය සඳහා ලබා ගන්නා ලදි. එය ISO/IEC 9899:1990 නමින් (සාමන්‍ය ව්‍යවහාරයේ දී C90) ප්‍රමිතිකරණය කරන ලදි. එහෙයින් C89 හා C90 එකම පරිගණක භෂාවක් සඳහා භාවිතා වූ ප්‍රමිතීන් වේ.

 C99 

ANSI/ISO ප්‍රමිතිකරණ ක්‍රියාවලියෙන් පසුව වසර ගණනාවක් C භාෂා පිරිවිතර සාපේක්ෂව ස්ථීර ලෙස පැවතුනි. 1995 දී ප්‍රමිතියේ පවතින සමහර කරුණු නිවැරදි කිරීමටත් ජාත්‍යන්තර අක්ෂර මාලාවට වැඩි දායකත්වයක් ලබා දීමටත් C90 සඳහා පළමු ප්‍රමාණික සංශෝධනය (Normative Amendment 1) සිදුවිය. එය තවදුරටත් 1990 අග භාගයේ දී සංශෝධනය වී ISO/IEC 9899:1999 ලෙස ප්‍රකාශයට පත් කරන ලදි. එම ප්‍රමිතිය සාමන්‍ය ව්‍යවහාරයේ දී "C99" ලෙස හැඳින්වේ. Technical Corrigenda මඟින් එය ද මේ වන විට තුන් වරක් නැවත සංශෝධනය වී ඇත.

 C11 

2007 දී C භාෂාවේ තවත් සංස්කරණයක් සිදුකිරීම සඳහා කටයුතු ආරම්බ කෙරින. නිල වශයෙන් 2011-12-08 වනදා ප්‍රකාශයට පත් වීමට පෙර එය “C1X” ලෙස හැඳින්විය.  මෙහිදී C ප්‍රමිති කමිටුව දැනට පවත්නා නිර්මාණයන් තුල පරීක්ෂා කර නොමැති භාෂාවේ නව අංග භාවිතය සීමා කිරීමට කටයුතු කරන ලදි.

පොදු වර්ගයේ macros (type generic macros), නිර්නාමික ආකෘතීන්, වැඩි දියුණු කල යුනිකෝඩ් භාවිතය, අණුක කාර්යයන් (atomic operations), සමාන්තරව ක්‍රියාත්මක කල හැකි ගැලීම් (multi-threading) සහ සීමා පරීක්ෂක ශ්‍රිත (bounds ­ checked functions) වැනි නව අංග ගණනාවක් C11 ප්‍රමිතියේදී C භාෂාවට හා එහි පුස්ථකාලයට එක් විය. තවද එය C++ පරිගණක භාෂාව සමඟ C භාෂාවේ ගැළපීමද වැඩි දියුණු කරන ලදි.

 Embedded C 

ඓතිහාසිකව, පරිපථ සඳහා වූ C වැඩසටහන්කරණය, ස්ථීර-ලක්ෂ්‍ය ගණිතය (fixed ­ point arithmetic), ප්‍රභින්න මතක ගබඩා එකකට වැඩි ගණනක් භාවිතය සහ මූලික ආදාන ප්‍රතිදාන කාර්යයන් වැනි ලක්ෂණ ලබා දීමට ප්‍රමිතිකරණය නොකල දිගු භාවිතා කරන ලදි.

2008 දී C ප්‍රමිති කමිටුව, C භාෂාව වර්ධනය කරමින් තාක්ෂණික වාර්ථාවක් පළ කල අතර එමඟින් මෙම ගැටළු වලට විසඳුම් ලෙස සියළුම නිර්මාණයන් පිළිපැදිය යුතු පොදු ප්‍රමිතියක් හඳුන්වා දෙනු ලැබුවේය. එහි ස්ථීර-ලක්ෂ්‍ය ගණිතය (fixed ­ point arithmetic), නාමික මතක අවකාශ සහ මූලික ආදාන ප්‍රතිදාන දෘඩංග භාවිතය වැනි සාමන්‍ය C භාෂාවේ නොමැති ලක්ෂණ ගණනාවක් අන්තර්ගත වේ.

 ආකෘතීන් 

 සංකේත මාලාව 
C භාෂාවේ කේතයන්හි භාවිතා වන අක්ෂර මාලාවට පහත අක්ෂර ඇතුළත් වේ.

අක්ෂර: a–z, A–Z, _
සංඛ්‍යාංක: 0–9
විරාම ලක්ෂණ: ~ ! @ # % ^ & * ( ) - + = : ; " ' < > , . ? | / \ { } [ ]
හිස් අවකාශ දැක්වීමට භාවිතා කරන අක්ෂර: space, horizontal tab, vertical tab, form feed, newline

නව පේළියකට යොමු කිරීමේ අක්ෂරය අක්ෂර පේළියක අවසානය දක්වයි; එය තනි අක්ෂරයක් ම වීම අවශ්‍යය නොමැති අතර එකකට වැඩි අවස්ථා වලදී ඒ සියල්ලම C භාෂාව එකක් ලෙස සළකයි.

අමතර බහු-බයිට් කේතාංකනය කරන ලද අක්ෂර භාවිතා කල හැකි වුවත් විවිධ පද්ධතීන් සමඟ භාවිතා කිරීමේදී ගැටළු මතු විය හැක. මෑතකදී ප්‍රකාශයට පති කරන ලද C11 ප්‍රමිතිය මඟින් බහු ජාතික යුනිකේත අක්ෂර භාවිතයට අවසර දී ඇති නමුත් \uDDDD  කේතාංකනය (DDDD මඟින් යුනිකේත අක්ෂර සඳහා පොදු භාවිතය දක්වයි උදා: \u4025) භාවිතයෙන් C කේතය පද්ධති අතර පහසුවෙන් භාවිතා කල හැකි පරිදි ලිවිය යුතුය. මෙම අංගය පුළුල්ව නිර්මාණය කර නැත.

මූලික C ක්‍රියාත්මක කරවීමේ අක්ෂර මාලාවේ දී alert, backspase හා carriage return සඳහා නිරූපණ අක්ෂර සමඟ C භාෂාවේ භාවිතා කල අක්ෂර ම භාවිතා වේ.

 මුලපද 
C89 ප්‍රමිතියේ මුලපද (වෙන්කල විශේෂිත තේරුම් සහිත වචන) 32 ඇත.

auto
break
case
char
const
continue
default
do

double
else
enum
extern
float
for
goto
if

int
long
register
return
short
signed
sizeof
static

struct
switch
typedef
union
unsigned
void
volatile
while

C99 ප්‍රමිතියේ දී තවත් මුල පද 5 එකතු විය.

_Bool
_Complex

_Imaginary
inline

restrict

C11 ප්‍රමිතියේ දී තවත් මුල පද 7 එකතු විය.

_Alignas
_Alignof

_Atomic
_Generic

_Noreturn
_Static_assert

_Thread_local

බොහෝමයක් අලුතින් එක් වූ මුලපද underscore සළකුණකට පසුව වූ ඉංග්‍රීසි කැපිටල් අක්ෂරයකින් පසුව ආරම්භ වේ. එයට හේතුව නම් එම ආකෘතීන් සහිත මුල පද කලින් භාෂාවේ නිර්මාණයන් සඳහා C ප්‍රමිති මඟින් වෙන්කර තිබීමයි. මේවා පවතින වැඩසටහනේ ප්‍රභව කේතයන්හි භාවිතා කිරීම කල නොහැකිව තිබූ නිසාම C භාෂා නිර්මාණයන් මඟින් වැඩසටහන්කරණ භාෂාවට මෙම දිගු වල සහභාගීත්වය ලබාදීම ආරම්භ කරන තුරු එමඟින් කිසිඳු බලපෑමක් නොවීය. සමහර සම්මත ශීර්ෂ (headers) මෙවැනි underscore සළකුණු සහිත පද සඳහා සුදුසු තුල්‍ය අර්ථදැක්වීම් (define) සිදුකරයි.

 කාරකයන් 

C භාෂාව සතුව පොහොසත් කාරකයන් සමූහයක් පවතී. ඒවා සමහරක් ප්‍රකාශනයක් ක්‍රියාත්මක වීමේදී කුමන ආකාරයෙන් සංචාලන සිදුවිය යුතුද යන්නද නියම වශයෙන් සඳහන් කරයි. C භාෂාවේ කාරකයන් පහත පරිදි වේ.

 ගණිතමය: +, -, *, /, %:
 ආදේශක: =
ආවර්ධක (augmented) ආදේශක: +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
 බිට් සලකා සිදුකරන තර්කන: ~, &, |, ^
 බිට් සලකා සිදුකරන තල්ලු කිරීම්: <<, >>
 බූලියන් තර්කන: !, &&, ||
 තත්වයන් ඇගයීම: ? :
සමානාත්මතාවය පරීක්ෂාකිරීම: ==, !=
 කාරයයන් ක්‍රියාත්මක කරවීම: ( )
 වැඩි කිරීම් සහ අඩු කිරීම්: ++, --
 සාමාජිකයින් තේරීම: ., ->
 වස්තු වල ප්‍රමාණය ගණනය කිරීම: sizeof
 පටිපාටිගත සම්බන්දතා: <, <=, >, >=
 සමුද්දේශ සහ (වි)සමුද්දේශ (dereference): &, *, [ ]
 අනුක්‍රමයන්: ,
 අනු ප්‍රකාශන (subexpression) කාණ්ඩ කිරීම්: ( )
 වර්ග පෙරැළීම්: (typename)

ගණිතයේ දී මෙන් නොව C භාෂාවේ දී = කාරකය සමානතාවය දැක්වීම වෙනුවට ආදේශ කිරීම සඳහා යොදා ගනී. එය Fortran සහ PL/I භාෂා වල පූර්වාදර්ශයෙන් ලබා ගෙන ඇත. සමානතාවය දැක්වීමට == භාවිතා වේ. එසේ වුවද මෙම කාරකයන් දෙක පටලවා භාවිතා කරන සමහර අවස්තා වලදී C භාෂා පරිවර්ථකය මඟින් කිසිඳු දෝෂ පණිවිඩයක් ලබා නොදෙයි. උදාහරණයක් ලෙස if(a=b+1) යන ප්‍රකාශනයේදී a හි අගය බින්දුවට වඩා විශාලව පවතින තාක් if සඳහා සත්‍යය යන අගය ලැබේ. අමතර වශයෙන් C භාෂාවේ කාරක ප්‍රමුඛතාවය සහජ ඥානය සහිත නොවූවක් වන අතර == සළකුණ & සහ | සළකුණු වලට වඩා තදින් ප්‍රකාශන වලට බැඳී පවතී. එනම් x & 1 == 0 යන්න නිවැරදිව ක්‍රියාත්මක වීමට නම් එය (x & 1) == 0 පරිදි ලිවිය යුතු වේ.

 "hello, world" උදාහරණ වැඩසටහන 
K&R ග්‍රන්ථයේ මුල්ම සංස්කරණයේ සඳහන් "hello, world" උදාහරණය සෑම පරිගණක භාෂාවකම පාහේ මූලික අරම්බක වැඩසටහන් ආකෘතිය ලෙස භාවිතා කෙරින. මෙහිදී වැඩසටහන මඟින් "hello, world" යන්න පරිගණක තිරය මත දිස්වීම පමණක් සිදුවේ.

මුල්ම සංස්කරණය:

main()
{
    printf("hello, world\n");
}

ප්‍රමිතිකරණය මඟින් තහවුරු කරන ලද "hello, world" වැඩසටහන:The original example code will compile on most modern compilers that are not in strict standard compliance mode, but it does not fully conform to the requirements of either C89 or C99. In fact, C99 requires that a diagnostic message be produced.

#include <stdio.h>

int main(void)
{
    printf("hello, world\n");
}

මෙහි පළමුවෙන්ම සඳහන් වන #include පෙර සැකසුමෙන් සිදුකරන්නේ එම පේළිය stdio.h නම් ශීර්ෂ ගොනුවෙන් ප්‍රතිස්ථාපනය කිරීමයි. එය භාෂා පරිවර්ථකය මඟින් සිදුකරන කාර්යයකි. stdio.h ශීර්ෂ ගොනුවේ printf වැනි මූලික ආදාන ප්‍රතිදාන වලට සම්බන්ඳ කාර්යයන් අර්ථදක්වා ඇත. කෝණික වරහන් මඟින් දැක්වෙන්නේ මෙම ශීර්ෂ ගොනුව සම්මත C ශීර්ෂයන් තිබෙන ස්ථානයේ පවතිනවා යන්නයි. අපගේ වැඩසටහන් පවතින ෆෝල්ඩරයේ පවතින ශීර්ෂ ගොනුවක් මෙලෙස වැඩසටහනට ලබා ගැනීමට උදෘත පාඨ සළකුණු තුල එය ලිවිය යුතුය.

ඉන් පසුව දැක්වෙන main නම් වදනින් දැක්වෙන්නේ වැඩසටහනේ ප්‍රධාන කාර්යයේ අර්ථ දැක්වීමයි. වැඩසටහනක ප්‍රධාන කාර්යයට විශේෂ වටිනාකමක් ඇති අතර සෑම විටම වැඩසටහන ක්‍රියාත්මක වීම ආරම්භ කරන්නේ මෙම  ප්‍රධාන කාර්යයෙන් වේ. එහි වරහන් මඟින් ප්‍රධාන කාර්යයට ලබා දෙන පරාමිතීන් නිරූපණය කරන අතර එම පරාමිතීන් වැඩසටහන ක්‍රියාත්මක කරන අවස්ථාවේ දී ලබාදේ. මෙම වැඩසටහනේ void ලෙස දැක්වෙන්නේ එලෙස භාහිරින් පරාමිතීන් වැඩසටහන තුළට ලබා නොගන්නා බවයි.The main function actually has two arguments, int argc and char *argv[], respectively, which can be used to handle command line arguments.  The C standard requires that both forms of main be supported, which is special treatment not afforded any other function.

ආරම්භක සඟල වරහන ප්‍රධාන කාර්යයේ ආරභය දක්වයි.

﻿ඊළඟ පේළියේ දැක්වෙන්නේ printf කාර්යය ක්‍රියාත්මක කරවීමයි. එහිදී එම කාර්යයට “hello, world\n” යනුවෙන් අක්ෂරමය පරාමිතික අගයක් ලබා දී ඇති අතර \n යනු පැනයාමේ සළකුණ (escape sequence) වේ. භාෂා පරිවර්ථන කර්යයේ දී එය නව පේලීයක් ලබා ගැනීමට භාවිතා කරන සළකුණ (new line character) බවට වෙනස් කරයි. printf යනු ලබා දිය හැකි පරාමිතීන් ගණන සීමා කර නොමැති කාර්යයක් වේ. එය printk යන පද්ධති කාර්යය (system call) භාවිතයෙන් සම්මත ප්‍රතිදානය වන පරිගණක තිරය මතට උදෘත ලකුණු අතර ඇති අක්ෂර ඛණ්ඩය ලබා දේ. අවසන ඇති තිත් කොමාව මඟින් එම වගන්තියේ අවසානය දක්වයි.

අවසානයේ ඇති සඟල වරහන මඟින් ප්‍රධාන කර්යයේ අවසානය දක්වයි. මෙහිදී නම් එය මුළු වැඩසටහනේ ම අවසානය වේ. සාර්ථකව ධාවනය වී අවසන් වූ වැඩසටහනක් මඟින් මෙහෙයුම් පද්ධතියට ශුන්‍යය (0) නිකුත් කරන අතර එය වැඩසටහනේ නික්මයාමේ තත්වය (exit code) වේ.

මේවාත් බලන්න
Comparison of Pascal and C
Comparison of programming languages
International Obfuscated C Code Contest
List of C-based programming languages
List of compilers#C compilers

සටහන්

යොමුව
Kernighan, Brian W.; Ritchie, Dennis M. (February 1978). The C Programming Language (1st ed.). Englewood Cliffs, NJ: Prentice Hall. ISBN 0-13-110163-3.  Regarded by many to be the authoritative reference on C.
Kernighan, Brian W.; Ritchie, Dennis M. (1988). The C Programming Language (2nd ed.). Englewood Cliffs, NJ: Prentice Hall. ISBN 0-13-110362-8. {{cite book}}: Unknown parameter |month= ignored (help)
Category:CS1 errors: unsupported parameter
Ritchie, Dennis M. (1993). "The Development of the C Language" . සම්ප්‍රවේශය 1 January 2008. Thompson had made a brief attempt to produce a system coded in an early version of C—before structures—in 1972, but gave up the effort. {{cite web}}: Unknown parameter |month= ignored (help)
Category:CS1 errors: unsupported parameter
Ritchie, Dennis M. (1993). "The Development of the C Language" . සම්ප්‍රවේශය 1 January 2008. The scheme of type composition adopted by C owes considerable debt to Algol 68, although it did not, perhaps, emerge in a form that Algol's adherents would approve of. {{cite web}}: Unknown parameter |month= ignored (help)
Category:CS1 errors: unsupported parameter
Giannini, Mario; Code Fighter, Inc.; Columbia University (2004). "C/C++" . in Hossein, Bidgoli. The Internet encyclopedia. 1. John Wiley and Sons. p. 164. ISBN 0-471-22201-1. http://www.wiley.com/WileyCDA/WileyTitle/productCd-0471222011.html . ප්‍රතිෂ්ඨාපනය 21 March 2013. 
 C (ක්‍රමලේඛන භාෂාව)
Lawlis, Patricia K. (1997). "Guidelines for Choosing a Computer Language: Support for the Visionary Organization" . Ada Information Clearinghouse. සම්ප්‍රවේශය 18 July 2006. {{cite web}}: Unknown parameter |month= ignored (help)
Category:CS1 errors: unsupported parameter
"Programming Language Popularity". 2009. සම්ප්‍රවේශය 16 January 2009.
"TIOBE Programming Community Index". 2009. සම්ප්‍රවේශය 6 May 2009.
Stroustrup, Bjarne (1993). "A History of C++: 1979−1991"(PDF). 1 May 2011 දින මුල් පිටපත (PDF) වෙතින් සංරක්ෂණය කරන ලදී. සම්ප්‍රවේශය 9 June 2011.
"JTC1/SC22/WG14 – C". Home page. ISO/IEC. සම්ප්‍රවේශය 2 June 2011.
"TR 18037: Embedded C" (PDF). ISO / IEC. සම්ප්‍රවේශය 26 July 2011.
ISO/IEC 9899:201x (ISO C11) Committee Draft
"10 Common Programming Mistakes in C++". Cs.ucr.edu. සම්ප්‍රවේශය 26 June 2009.
Schultz, Thomas (2004). C and the 8051 (3rd ed.). Otsego, MI: PageFree Publishing Inc. p. 20. ISBN 1-58961-237-X. සම්ප්‍රවේශය 10 February 2012.

භාහිර සබැඳි
 ISO C Working Group official website
 comp.lang.c Frequently Asked Questions
 ISO/IEC 9899. Official C99 documents.
 ANSI C Standard (ANSI X3J11/88-090)  (Published 13 May 1988), Third Public Review
 ANSI C Rationale (ANSI X3J11/88-151) (Published 18 November 1988)


ප්‍රවර්ගය:ඇමෙරිකානු නව නිපැයුම්
ප්‍රවර්ගය:C programming language family
ප්‍රවර්ගය:C programming language
ප්‍රවර්ගය:Cross-platform software
ප්‍රවර්ගය:Low-level programming languages
ප්‍රවර්ගය:Procedural programming languages
ප්‍රවර්ගය:Programming languages created in 1972
ප්‍රවර්ගය:Statically typed programming languages
ප්‍රවර්ගය:Systems programming languages