సీ భాషకు ముందుమాట

సి భాష, అందులోని వ్యాకరణము వగైరా, నేర్చుకునే ముందు మీరు ఆ భాషలోని కొన్ని పదాల (terms) కు అర్ధం తెలుసుకోవటం మంచిది. అవి సీ-భాషను మరింత బాగా నేర్చుకోవడానికి పనికివస్తాయి.

## కంపైలు: సి-భాష ఎలా పని చేస్తుంది?

ఇతర ప్రోగ్రామింగు భాషలలాగానే సీ-భాషను కంప్యూటరు సరాసరి అర్ధం చేసుకోవాలంటే కుదరదు. సి-భాష ముఖ్యోద్దేశము మనుషులచే కంప్యూటరుకు సూచనలు ఇచ్చుటకు, అదే సమయములో మనము ఇచ్చిన సూచనలను కంప్యూటరుకు అర్ధం అయ్యే యాంత్రిక భాష లోకి మార్చే ప్రక్రియను సులభంచేయటం. మీరు వ్రాసిన సి-భాష ప్రోగ్రామును, నడిపించగలిగే (executable) యాంత్రిక భాషలోకి మార్చుటకుగాను ***కంపైలరు*** అనే ప్రోగ్రామును ఉపయోగించవలెను. మనము సీ-భాషలో వ్రాసిన ప్రోగ్రామును యాంత్రిక భాషలోకి మార్చుటకు కంపైలరు అనే ప్రోగ్రామును ఉపయోగించాలి. మీరు సీ-భాషలో వ్రాసిన ప్రోగ్రాము ఒకటి కంటే ఎక్కువ ఫైళ్ళలో ఉంటే, వాటిని కలిపి ఒక నడిపించగలిగే ప్రోగ్రాముగా లేదా ***లైబ్రరీ***గా తయారు చేయుటకుగాను ***లింకర్*** (linker) అను ప్రోగ్రామును వాడాలి. లైబ్రరీ అనునది ఇతర ప్రోగ్రాములలో వాడుకొనుటకు అవసరమైన చిన్న చిన్న ప్రోగ్రాములను దాచుకొనుటకు ఉపయోగిస్తారు, అంతేగానీ దానిని ఒక్కదానినే నడిపించటం కుదరదు. అయితే సాధారణముగా కంపైలు చేయటం, లింకు చేయటం అనేవి చుట్టాల వంటివి. ఉపయోగించినప్పుడు రెండింటినీ ఉపయోగించవలసి వస్తుంది. కాబట్టి చాలామంది ఆ రెండిటినీ ఒకే పనిగా చూస్తారు. మీరు ఒక విషయాన్ని ఎల్లప్పుడూ గుర్తుపెట్టుకోవాలి, అది ఏమిటంటే - సీ-భాషలో ఒక దిక్కులోనే కంపైలు చేయవచ్చు: అనగా మీ సీ ప్రోగ్రామును యాంత్రిక భాషలోకి కంపైలు చేయవచ్చు, ఇది సులభమే. కాని డీకంపైలు (యాంత్రిక భాష నుండి సీ-భాష ప్రోగ్రామును పొందటం) మాత్రం చాలా కష్టం. డీకంపైలర్లు ఉన్నాయి, కానీ అవి పెద్దగా ఉపయోగపడే సీ-ప్రోగ్రాములను సృష్టించలేవు. మీకు అత్యంత నాణ్యమైన, ప్రముఖమైన GNU సీ-కంపైలరు http://gcc.gnu.org/లో దొరుకుతుంది.

## ఇంటిగ్రేటెడ్ డెవలప్‌మెంట్ ఎన్విరాన్‌మెంట్స్ (IDEs)
ఇంటిగ్రేటెడ్ డవలప్‌మెంట్ ఎన్విరాన్‌మెంట్ అనేవి మీ ప్రోగ్రాములు వ్రాసుకొని భద్రపరచుకొనుటకు, కంపైలు చేసుకొనుటకు, లింకు చేసుకొనుటకు కావలిసిన వివిధ ప్రోగ్రాముల సమూహము అని చెప్పవచ్చు. మనము ఒక ప్రోగ్రాము తయారు చేయుటకు కావలిసినవి అన్నీ ఒకే దగ్గర దొరకటం వలన IDEలు ప్రోగ్రాముల తయారీకి చాలా సౌకర్యవంతముగా ఉంటాయి. అంతేకాదు, మనము వ్రాసిన ప్రోగ్రాములో ఉన్న తప్పులను కనిపెట్టుటకు సహాయపడు డిబగ్గరు (debugger) అను ప్రోగ్రాము కూడా IDE లలో ఉంటాయి. ఈ డిబగ్గరుతో మనము ఒక్కొక్క వాక్యమును నడిపి, అసలు తప్పు ఏ వాక్యములో ఉన్నదో మనము తెలుసుకునేటట్లు చేయును. IDEలలో Microsoft Visual C++ (MS VC++) చాలా పేరెన్నికగన్నది, కానీ ఉచితముగా లభించదు. ఉచితముగా దొరికే IDEలలో DevC++ ప్రముఖమయినది, http://www.bloodshed.net/లో మీకు లభించగలదు. http://www.smorgasbordet.com/pellesc/లో లభించు Pelles C కూడా మంచి IDE. అన్నీ సీ-ప్లస్.ప్లస్ అని ఉన్నాయి కదా మరి సీ-భాషకు పని చేస్తాయా అని మీరు సందేహ పడనవసరం లేదు, ఎందుకంటే సీ-భాషలో ఉన్న అన్ని ప్రత్యేకతలు మనకు సీ-ప్లస్.ప్లస్ భాషలో కూడా ఉంటాయి. కాబట్టి చాలా సి-ప్లస్.ప్లస్ కంపైలరులు సీ-కంపైలరుతో బాటుగా వస్తాయి. మీరు సీ-భాషను నేర్చుకునే ముందు ఒక మంచి IDE ని సమకూర్చుకోవటం ఎంతయినా మంచిది.

## బ్లాక్ స్ట్రక్ట్చరు, స్కోపు
మనము ఇప్పుడు సీ-ప్రోగ్రాము యొక్క స్వరూపము యొక్క ప్రాథమిక అంశాల గురించి తెలుసుకుందాము. బ్లాకు అనగా కొన్ని వాక్యముల సమూహము. వీటిని మనము ఒకే ఒక్క వాక్యముగా పరిగణించ వచ్చు. సీ-భాషలో బ్లాకులు "తెరుచుకునే మీసాల బ్రాకెట్ల"తో `{` మొదలు అయ్యి "మూసుకునే మీసాల బ్రాకెట్ల"తో `}` ముగుస్తాయి. బ్లాకులలో బ్లాకులు, వాటిలో లోపల మళ్ళీ బ్లాకులు ఇలా కూర్చుకుంటూ వెళ్ళిపోవచ్చు.

సమాచారము లేదా ఫంక్షనులు ఏ రకంగా వాడబడుతున్నాయో లేక చూడబడుతున్నాయో తెలుపుటను మనము స్కోపు అని వ్యవహరిస్తాము. సీ-భాషలో రెండు రకాల స్కోపులు ఉన్నాయి. local (ప్రాంతీయం), global (విశ్వవ్యాప్తం). మనము దేని గురించయినా గ్లోబల్ అని మాట్లాడుతున్నప్పుడు దానిని ప్రోగ్రాములో ఎక్కడయినా చూడవచ్చు లేదా వాడుకోవచ్చు. దేనినయినా లోకల్ అని పిలిచినచో అప్పుడు వాటిని అవి పుట్టిన (declared) బ్లాకులో మాత్రమే చూడవచ్చు లేదా వాడుకోవచ్చు. (బయట బ్లాకులలో ఉన్న వాటిని లోపలి బ్లాకులలో కూడా వాడవచ్చు, కానీ లోపలి వాటిని బయట వాడుట కుదరదు.)

## ఫంక్షనులు వాడుటకు సూత్రములు
ఫంక్షనులు సీ-భాషలో చాలా ప్రధాన పాత్ర పోషిస్తాయి. ఫంక్షను అనునది కొన్ని పనులు చేయుట కోసం తయారు చేయబడిన ఒక ప్రత్యేక బ్లాకు అని చెప్పవచ్చు. ఫంక్షనుని బాగా తయారు చేసినచో ఇతర ప్రోగ్రామరులు, అది చేయు పనిని, ఎలా చేస్తుంది అనేది తెలుసుకోనవసరము లేకుండా, ఉపయోగించుకోగలుగుతారు. ఫంక్షను చేయు పనిని ఉపయోగించుట అను క్రియను ఫంక్షను-కాల్ (function call) అని పిలుస్తారు. చాలా ఫంక్షనులు వాటికి నిర్దేశించిన పనిని చేయుటకు కొంత సమాచారము అవసరం పడుతుంది, ఆ సమాచారమును ఆర్గుమెంట్సు (arguments) అని పిలుస్తారు. చాలా ఫంక్షనులు వాటి ఫలితమును ఒక విలువగా వాటిని పిలిచిన దానికి తిరిగి పంపిస్తాయి, వీటిని రిటర్న్ వాల్యు (return value) అని పిలుస్తారు

ఒక ఫంక్షనుని పిలిచే ముందు మీరు ఆ ఫంక్ష గురించి కొన్ని విషయాలు తెలుసుకోవాలి:
# ఆ ఫంక్షను ఏ పనిచేస్తుందో తెలుసుకోవాలి.
# ఎటువంటి సమాచారం (datatype) ఆర్గుమెంట్సుగా తీసుకుంటుంది, వాటి అర్ధమేమిటి.
# ఎటువంటి సమాచారాన్ని రిటర్న్ వాల్యుగా పంపిస్తుంది, దాని అర్ధమేమిటి.

అన్ని ఫంక్షనులను గ్లోబల్ సమాచారముగా పరిగణిస్తారు. అంటే ఒక ఫంక్షను లోపల ఇంకో ఫంక్షనుని రాయటం కుదరదు. గ్లోబలు సమాచారము కాక మిగతా సమాచారమునంతటినీ ఫంక్షను లోపలే సృష్టించాలి.

ప్రతీ నడిపించగలిగే ప్రోగ్రాములో main () అను ఒక ఫంక్షను తప్పని సరిగా ఉండాలి.

## సి-భాష లైబ్రరీ
1983 లో సీ-భాషను స్థిరీకరణ చేస్తున్నప్పుడు, ఆ కమిటీవారు, కొన్ని ప్రాథమిక ఫంక్షనులు దాదాపుగా అన్ని ప్రోగ్రాములకు అవసరమని గుర్తించారు. ఈ ఫంక్షనులన్నీ కలిపి సీ-భాష లైబ్రరీగా వ్యవహరిస్తున్నారు. సీ-భాష లైబ్రరీలో మనకు గణితము, ఫైళ్ళు, వగైరా వాటికి సహాయపడు పనులన్నిటికీ ఫంక్షనులను చేర్చారు. అయితే లైబ్రరీ మనకు హార్డువేరు, మొదలయిన వాటికి సంబంధించిన ఫంక్షనులను మాత్రం ఇవ్వదు. `"Hello, World"` ప్రోగ్రాములో మనము `printf` అనే ఒక లైబ్రరీ ఫంక్షను ఉపయోగించాము. ఈ ఫంక్షను కంప్యూటరు స్క్రీను పైన అక్షరములను ముద్రించుటకు ఉపయోగించుతారు.

## అభిప్రాయములు - వాటిని ఉపయోగించు పద్ధతి
అభిప్రాయములు (comments) మనము వ్రాసిన ప్రోగ్రాము గురించి వివరించుటకు ఉపయోగించు కోవచ్చు. మనము వ్రాసే ప్రోగ్రాములో సందర్భానుసారముగా ఎక్కడయినా అభిప్రాయములను ఉంచవచ్చును. సీ-భాషలో అభిప్రాయమును /*తో మొదలు పెట్టి */తో ముగిస్తాము. మంచి పద్ధతిలో అభిప్రాయములను చేర్చటం అనేది సాఫ్టువేరు తయారీలో చాలా ముఖ్యమైన అవసరంగా పరిగణిస్తారు. అభిప్రాయములను చేర్చటం అనేది ఇతరులు మీ ప్రోగ్రామును అర్ధము చేసుకోవటనికే కాదు భవిష్యత్తులో మీ ప్రోగ్రామును మీరే తొందరగా అర్ధము చేసుకోవటానికి, అది ఎలా పనిచేస్తుందో గుర్తుకు తెచ్చుకోవడానికి చాలా పనికి వస్తాయి. సాధారణముగా ఏవయితే అంత తొందరగా అర్ధమవవు అని అనుకుంటామో అక్కడ అభిప్రాయమును చేర్చటం అనునది చాలా మంచి ఆలోచన. అయితే అలాగని ప్రతీ వాక్యానికి అభిప్రాయమును చేర్చటం అనేది మంచి ఆలోచన కాదు. అలా చేయటం వలన మీ ప్రోగాము చదువుటకు కష్టం అయిపోయే అవకాశం కూడా ఉంది మరి.

మంచి ప్రోగ్రామింగు పద్ధతి అవలంభించటం అనేది ప్రోగ్రాములను సులువుగా చదువుటకు, అర్ధవంతముగా ఉంచుటకు మరియూ మంచి ప్రోగ్రాము అన్న భావన కల్పించుటకు ఎంతయినా అవసరము. ఇది అన్ని ప్రోగ్రామింగు భాషలకు వర్తిస్తుంది అని చెప్పవచ్చు. సాధారణముగా అయితే, సరిపడా ఖాళీలను వదలటం, క్రొత్త బ్లాకులను మొదలు పెట్టినప్పటి నుండి మూసివేసే వరకు అన్ని వాక్యములను ఒకే స్థానములో మొదలు పెట్టటం (aligning), ఉపయోగించే ఫంక్షనులకు, వేరియబుల్సులకు అర్ధవంతమైన పేర్లు పెట్టటం, మొదలయినవన్ని చాలా అవసరం.

## సీ-[[ప్రీప్రాసెసరు]]
కొన్ని సార్లు మీరు కంపైలరుకు ప్రత్యేకమైన సూచనలు ఇవ్వాలని అనుకుంటారు. ఈ సూచనలను మనము "ప్రీప్రాసెసర్ డైరెక్టీవు"లు అను ప్రోగ్రాములో కూర్చి ఇవ్వవచ్చు. మీరు మీ ప్రోగ్రామును కంపైలు చేయటం మొదలు పెట్టినప్పుడు, "ప్రీప్రాసెసరు" అనబడే ఒక ప్రోగ్రాము మీ ప్రోగ్రాములో ఉన్న ఈ సూచనల కోసం వెతికి, ఆ సూచనలకు అనుగుణముగా మీ అసలు ప్రోగ్రామును మారుస్తుంది, ఆ తరువాతే మీ ప్రోగ్రాము కంపైలు చేయబడుతుంది. మీరు ఇక్కడ గుర్తుంచుకోవలసిన విషయమేమిటంటే ప్రీప్రాసెసరు డైరెక్టీవులు ప్రోగ్రాములో ఉన్నా కూడా, వాటిని మీ ప్రోగ్రాముతో పాటుగా కంపైలుచేయ బడవు, వాటిని కంపైలు ప్రక్రియకు సూచనలు ఇచ్చుటకు మాత్రమే ఉపయోగించుకోవచ్చును. సీ-భాషలోని అన్ని ప్రీప్రాసెసరు డైరెక్టీవులు కూడా `#` ('హాష్' అని పలుకుతారు) అనే అక్షరముతో మొదలవుతాయి. మీరు `"Hello, World!"` ప్రోగ్రాములో ఇది వరకే `#include` అను ప్రీప్రాసెసరు డైరెక్టివుని చూసి ఉంటారు. `#include` అను ప్రీప్రాసెసరు డైరెక్టీవు ఒక ఫైలుని తెరిచి అందులో ఉన్న సమాచారమును `#include`కి బదులుగా చేర్చును. `#define` అను ప్రీప్రాసెసరు డైరెక్టీవు కూడా చాలా విరివిగా ఉపయోగించుతారు.

వర్గం:సాఫ్టువేరు వ్రాయు భాషలు