C iussa et instructiones in structuris segmentatis adhibet, talem grammaticam et memoriam gradu infimo adhibendo, eo consilio, ut programmatata simplicitercompilentur, sineinterpretatione. C utilis ad programmata describenda erat, quae antea inlingua machinali sola scripta essent.
Quia programmata in systemata varia facile lingua C transferuntur, principalis linguae C usus in programmandis systematis administrativis,compilatrisinterpretatrisque linguarum aliarum consistit. C quidem evolutionem multarum programmandi linguarum influit, praesertim linguaeC++, quae primitus commenta est ut lingua C extendatur.
C perutilis est ad programmata describenda, quae antea in lingua machinali sola scribeantur. Cum quidem programmator programma C circumscribit, possumus expectare compilatrum programma vertere in compendiosas sententias linguae machinalis. Et cum programma aliquid inexpectatum agit, programmator quoque potest scire id esse ob erratum suum nec ob compilatri interpretationem.
Quamquam facultates infimi gradus praebet, lingua C commenta est ad programmationem independentem machina citandam. Programmata quidem in systemata varia facile lingua C transferuntur. Et principalis linguae C usus consistit in programmandis systematis administrativis scribendis,compilatrisinterpretatrisque linguarum aliarum.
Quamquam ubique lingua C invenitur, hodie haud ad linguas programmandi docendum adhibetur. Nonnulli enim linguam vituperant quia compilatra programma C convertunt in linguam machinalem semper cum hoc agi potest. Programmatorem numquam compilatra minantur: Certus es agere velle hanc rem? Re vera vis hoc...? Ergo lingua sinit programmatorem facile creare programmata bona et mala. Et hoc multas difficultates dat tironibus dum linguam discunt.
C iussa et instructiones in structuris segmentatis adhibet, talem grammaticam et memoriam gradu infimo adhibendo, eo consilio, ut programmata simpliciter compilentur, sine multa interpretatione. Lingua quidem conspicua est quia paucos modos speciales quo res agantur in programmatores imponit. Quamobrem interdum programmatores appellant C "linguam machinalem altí gradús".
Sicut plurimae linguae iuxta traditionem ALGOL, C sinit programmare structuris, iterationibus, conspectibusque lexici variabilibus. Eius autem generum staticorum systema defendit, ne operationes non desideratae agantur. In lingua C, omnia iussa efficienda infunctionibus habentur. Parametra semper functionibus traduntur per valores, nec per referentias. Ut referentiae ipsae tradantur, valoremindicatorum traduntur. Variabilis genusstruct sinit datorum distinctorum generum elementa combinare ut coniunctim adhibeantur. Linguae C scriptura spatia lineasque inter nomina ignorat; semicolones (puncta et commas) adhibendo ad sententias desinendas.
C etiam has res praebet speciales:
functiones, quaenon-nidabiles (Anglicenon-nestable) dicuntur, quae definiri non possunt intra alias functiones, dum variabiles ita definiri possunt et intra functiones et in dictorum segmentis
typographiam aliquanto debilem; e.g., characteres sicut numeri integri adhiberi possunt
accessum ad computatri memoriam infimo gradu, qui efficiatur convertendo locos ad indicatores varium generum
functionum indicatores, quae sinunt clausuras rudimentarias et polymorphismos actuatos modo cum programma currat
ordinationisindicationem, sicut notionem secundariam, definitam iuxta arithmeticamindicatorum
praeprocessorium dicatum ad definitionemmacronum, fasciculos includenos, etcomplilationes condicionales efficiendas.
functionalitates complexas, sicut innitum/exitum, series characterum contractio, et functiones mathematicas, cohaerenter delegatas adalgoritmos librarios
circa triginta nomina reservata
syntaxim abALGOL divergentem secutum exemplum lingae B, e.g. adhibens
ceruchos { ... } loco begin ... end linguae ALGOL
signum aequalitatis ad valores assignandos (transcribendo) instar linguaeFortran
duo signa aequalitatis ad aequalitatem probandam (confer cum.EQ. in Fortran aut cum signo aequalitatis linguaeBASIC)
&& et || locoand etor in ALGOL, quae ab operatoribus bit & and | (quibus lingua B usa est in ambobus significationibus) distinguenda sunt, numquam evaluare operandum ad dextram signi, si proventus solo cum operando ad laevum computari possit (evaluatio circuitus brevis)
magnum numerum operatorum compositorum, sicut +=, ++, etc.
Omne programma lingua C scriptum constat in serie declarationum et sententiarum. Declarantur functiones et variabiles. Variabiles, constantes, operatores et functiones componunt sententiae ad res utiles faciendas. Lingua novem genera sententiarum, et quinque genera variabilium definit, inter genera conversiones et implicitas et explicitas sinens. Indicatores, qui locos memoriae indicant, partes maximi momenti in modo quo ordinationes numerorum et characterum redduntur, magnamque potestatem ad computatrum regendum programmatoribus dant. Omnia dicta in lingua habent valores numericos. Ergox=3 habet valorem tria, etc. Operatores arithmeticos et booleanos habet usitatos, sed cave: '=' est operator arithmeticus quamquam '==' est operator booleanus. Ergo, si primum "int x=1;" declaretur, x==1 aequat unum et x==2 aequat zerum; sed x=1 aequat 1 et x=2 aequat 2!
Declaratio statuit genus, nomen et valorem initialem variabilis vel functionis, et desinit in;. Omnes functiones et variabiles necessario declaratur ad initium programmatis, vel initium functionis vel initium copiae sententiarum secretae ab ceruchis {}.
"int x=1;" est declaratio variabilisx, generis numeri integri, ubi valor 1 assignatur inx.
"int scribe (char rem);" est declaratio functionis nominescribe quae reddit numerum generis numeri integri (int) et accepit argumentum generis characteris (char) nominerem.
In lingua C, ceruchi {} multas sententias cingunt ut una tractentur. Exempli gratia inSalve, Munde, ceruchi cingunt duas sententias quae functionemmain componunt.
Functio quaedam actuata, cum desinit, exitús valorem reddit qui datur in sententiaReturn (valorem); (sc. Latine "Redde (valorem)"). In exemplo,Main reddit valorem 0. Cum functionMain declaratur generisint, valor redditus tunc debet esse generisint. Vel si argumentum ad Returnint non est, programma valorem in genusint convertit. E.g. "return (0.02);" effecit utmain conclusus reddat 0.
Ullum nomen alphanumericum adhiberi potest ad variabilem nominandum, praeter illa nomina servata ad nominanda genera variabilium et dicta syntactica sicutif etfor. Litterae maiusculae ab minusculis distinguuntur, ut ita nominavar,Var, etvAr tres variabiles secretas nominentur.
Constans generisint: possunt scribi forma decimali, octali, vel sedecimali sic: numerus decimalis 15 = octalis (adde 0 ad initium) 017 = sedecimalis (add 0x ad initium) 0xf
Constans generislong int: adde L vel l ad initium numeri: decimalis L15 = octalis L017 = sedecimalis L0xf
Constans generisfloat/double: omnes numeri cum puncto '.' fractionem decimalem indicante vel cum 'e' potestatem decimalem indicante habentur esse generisdouble etdecimalis: 123.3, .012, 1.23e10
Contans generischar: 'a', '0', 'B', ... Etiam habentur characteres speciales: '\n' = nova linea, '\b' =retroite,'\"' = virgulae,'\''= virgula simplex, '\\' = linea dextrorsum inclinata
Constans generis versús, qui in lingua C idem est ac series constantium generischar: "malum", "Caesar", etc...
In linguis programmandi,ordinatio vel arretum dicitur modus quo elementa in seriem ordinentur. Elementa ordinata possunt esse numeri, characteres, functiones, vel aliae res. Ordinationes in lingua C declaramus scribendo:
Numero elementorum omisso, compilatrum effecit ut elementorum numerus aequet elementorum numerum constantis quo valores ordinati fingantur. Exempli gratia, ordinationum declarationes habemus validas
Primo in exemplo numero elementorum omisso, quia "Caesar" sex litteras habuit, numerus elementorum variabilis nomine "verbum" erit sex. In ultima declaratione, valor initialisvector non assignatur; nunc autem necessario elementorum numerus datur.
Quoddam elementum vocatur elementi numerum vocando. Habentur igitur, iuxta definitiones supra:
verbum [0] = 'C', verbum [1] = 'a', verbum [2] = 'e'vector1 [0] = 0, vector [2] = 2Matrix [0][0] = 0.1, Matrix [0][1] = 2, Matrix [1][2] = 3,
Indicator in re informatica est res qua locus memoriae computatri in programmate indicetur. In lingua C, indicatores fundamentales partes habent in quo modo series et ordinationes redduntur.
In lingua C, indicatores ad variabiles generumchar etint declarantur:
Post generis-nomen in declarationibus, operator * indicatori praepositus significat "indicator qui locum indicat variabilis huius generis". Extra declarationes autem, operator * indicatori praepositus significat "valorem in loco quem indicator indicat". Quapropter extra declarationes sententia
*indicator-alphanumericus='5';
efficit utchar '5' imponatur in locum indicatum. Si autem
char*indicator-alphanumericus='5';/* pravum!! */char*indicator-alphanumericus="5";/* rectum, quia exceptio habetur cum de serie characterum tractatur. */
scribatur, hoc pravum est quia '5' non est locus memoriae computatri. Quamquam nec "5" est locus memoriae, C autem sinit nos scriberechar *p="5"; quid equivalens estchar p[]="5";.
Operator & est operatoris * inversus: variabilis nomini praepositus locum memoriae eius dat. Hoc operatore possumus initialem indicatoris locum fingere:
Supra structura quaedam declaratur, quae variabilesaetas etnomen complectitur. Prima declaratio sola structuram nominepersona declarat sine variabile declarando. In secunda, structura non est nominata, sed variabilis nomineignota declaratur. Tertia declaratio requirit ut definitio iam extet generis nominepersona quo variabilisignota declaratur.
Exemplum quod infra sequitur monstrat modos tres quo valores ad elementa structurae assignantur, adhibendo variabilis nomen, indicatorem, et operatores*,., et->.
In C, rei genus automatice convertitur, cum quantitates inter variabiles traducuntur. Talis appellaturconversio implicita. Exempli gratia, observentur conversiones:
inti;doubled=13.45;i=d;printf("postquam sententia i=d functa est, habemus i=%f; d=%f",i,d);d=i;printf("postquam d=i functa est, habemus d=%f",d);
Nonnulli autem programmatores malunt conversiones explicitas. In lingua C, conversio explicita functa est scribendo nomen generis in parenthesi ante variabilem sic: "d = (double) i". Ambo modi convertendi validi sunt.
Interdum sunt functiones quae nihil reddunt. Hae functiones in lingua C dicuntur generisvoid. Genusvoid etiam utile est, ut indicatores generales definiantur. Ergo, cum "double d; int i; void * p;" declarentur, indicatorp potest utrumque variabilem indicare: etd eti (p=&d autp=&i potest). Cum autem de indicatore generisvoid tractetur, necesse est semper dare genus variabilis indicati antequam valorem eius adhiberi potest.
In lingua C sententia dicitur omnia alia dicta ab; conclusa, quae variabiles, operatores, constantes, et functiones combinant ad computationes utiles faciendas. Lingua C sola novem genera setentiarum ostendit.
Omne dictum in lingua C valorem habet. Exempli gratia dictum "x=2" habet valorem 2. Quapropter dictumx=y=2 est validum, valorem 2 simul imponens in variabilesx ety.
Lingua etiam non fortiter distinguit condiciones logicas ab dictis valorum: falsum est zerum, et verum est nonzerum.
Operatores arithmetici simplices: +, -, *, /, =,%: Operator% est operator moduli residui, ubi e.g. 5%2=1, et 6%2=0.
Operatores augendi et minuendi: ++, --: Operatores inclyti linguae C sunt ++ et --. i++ idem ac i=i+1 agit, sed solum postquam i evaluatur in dicto ubi sedet. ++i idem ac i=i+1 agit, sed postea i evaluatur in dicto ubi sedet. Ergo, ecce programma quod "x=y=0;y=x++;" primum exercens "x=1, y=0" producit; et postea "y=++x" exercens "x=2, y=2" producit:
intx,y;x=y=0;y=x++;printf("y=x++ primum dat x=%d, y=%d; ",x,y);y=++x;printf("postquam y=++x faciens tunc dat x=%d, y=%d",x,y);
Operatores complexi: =+, =-, =/, =*: "x=+5" idem dicit ac "x=x+5";et "x=*5" idem dicit ac "x=x*5"
Operatores booleani: <, >, ==, <>,!, &&, ||: Operatores booleanos usitatos habet, sed cave: '=' est operator arithmeticus quamquam '==' est operator booleanus. Ergo, si primum "int x=1;" declaretur, x==1 aequat unum et x==2 aequat zerum; sed x=1 aequat 1 et x=2 aequat 2! In lingua || = 'aut' et && = 'et'.
Operatores indicatorum:*,&,.,->: Operatores indicatorum partem fundamentalem agunt in quo modo lingua C reddit elementa ordinata. Videexplanatio indicatorum supra.
If (sc. Latine "si") est dictum quod exsecutionem aliarum sententiarum efficit cum argumentum nonzerum est. Usitate argumentum nonzerum est cum condiciones quaedam satisfaciuntur.
if(condicio==VERA){printf("Condicio est vera!\n");}else{printf("Condicio est falsa!\n");}
While etdo (sc. L. "dum" et "age") sunt dicta quae sententias efficiunt dum argumentum suum nonzerum manet.While condicionem probat ad initium,do ad finem cuiusqueiterationis.
charFALSA='n';charcondicio='i';while(condicio!=FALSA){printf("Condicio est vera! Iterumne probanda est (ita/non)?\n");condicio=getchar();}printf("Condicio nunc est falsa!\n");do{printf("Condicio est vera! Iterumne probanda est (ita/non)?\n");condicio=getchar();}while(condicio!=FALSA);printf("Condicio nunc est falsa!\n");
For est instar dictiwhile, sed indicem quandam declaratam augit in quaque iteratione.For hanc rem perficit brevi. Exempli gratia
Break etContinue sunt iussa quibus exsecutio aliae sententiarum interpelletur.Break (sc. Latine "Rumpe") exsecutionem catenae sententiarum currentis rumpit, praesentem structuram vel omnes iterationes sententiae regentis desinens.Continue (sc. L. "Excede") autem, exsecutionem continuo sequentem rumpens, praesentem structuram vel interactionem servat, effecitque ut proxima interactionem sequatur.
charRUMPE='r';charEXCEDE='e';while(1){printf("Si vis Excedere imprime 'e'. Si non imprime alteram litteram.\n");if(getchar()==EXCEDE)continue;printf("Usor non imprimit Excede 'e'. Rumpe? Si vis rumpere, imprime 'r'.\n");if(getchar()==RUMPE)break;printf("Usor imprimuit nec e 'excede' nec r 'rumpe'. Ergo nova iteratio habetur.\n");}printf("Usor imprimuit 'Rumpe' (r). Ergo exsecutio desinit!\n");
Switch (sc. L. "permuta") est sententia quae idem valet ut longa catena sententiarumif-else ex quibus omnibus prima vera perfertur aut ultima (default:). Sententia exempli gratia actuatur sic:
In exemplo, ab initiox=y=z=0. Sic= 'a', exsecutio salit adcase 'a':, postquam omnia quae sequuntur facta sunt:x=1,y=1, etz=1. Sic= 'b', exsecutio salit adcase 'b':, postquam omnia quae sequuntur facta sunt:x=0,y=1,z=1. Si c nec 'a' nec 'b' aequat, exsecutio salit adcase default:, postquam omnia quae sequuntur facta sunt:x=0,y=0,z=1.
Usitatissime, dictabreak adduntur post casus qui tunc logice dividuntur. CumBreak primum attigatur, exsecutio sententiaeswitch desinit.
In exemplo,goto efficit ut programma quinque iterationes agat, quid simile est sententiaedo. In linguis programmandi,goto est instar clausularumquod quae in loco clausularum accusativi+infinitivi adhibentur: programmatores cave, ne deutatur!
Return (sc. Latine "Redde") est sententia qua functio desinens valorem reddit. Syntax est "Return (valorem);".
In lingua C, programmatores suas proprias functiones et librarias functionum definire et declarare libenter possunt. Functiones definendae sunt eodem modo functionisMain, quae iam descripta est supra. Declaratio functionum necessario ad caput programmatis scribitur iuxtaiussa ad praeprocessorium quae in lingua C habentur incipere in symbolo #.
Lingua per se caret modo quo memoria dynamice allocetur (hoc est, dum programa currit), quo data inputetur et exponatur, et quo aliae res agantur. Lingua autem definit quasdamlibrarias functionum, quibus hae res agantur. Functionum librariae in programma includuntur per iussum #include<nomen-librariae> quae necessario ad caput programmatis scribendum est.
stdlib.h: praebet functiones quibus memoria regantur, series characterum in numeros generisdouble convertantur, iussa directe ad systema edantur, inquisationes varium generum actuentur, absolutus numeri valor aestimetur, et numeri integri commode dividantur.
stdio.h praebet functiones quibus data inputenur et exponantur computatro
math.h praebet functiones mathematicas sicut cos, sin, atan, exp, log, log10...
string.h praebet multas functiones quibus series characterum adaptentur
time.h praebet functiones quibus tempus et hora aestimantur
Functiones quibus memoria computatri regantur lingua C praebet in librariastdlib.h.
/*Alloca spatium memoriae magnitudinis variabilium decem generis ''int''. */int*ptr=malloc(10*sizeof(int));if(ptr==NULL){/* Systema memoriam allocare non potest */}else{/* Systema potuit memmoriam allocare. Nunc age aliquid. */free(ptr);/* Cum iam egimus quid volumus, nunc memoriam librare oportet. */}
Inter utilissimas functiones quae in exemplo supra monstratur sunt:
Sizeof: dictumsizeof(variabilis) (sc. L. "magnitudo") dat magnitudinem variabilis inoctetis (byte), quam requirunt functiones memoriae sicut malloc.
Malloc: sententiaint * p = malloc (10); allocat decem octetos memoriae et assignat indicatoremp ad locum variabilis generisint.
Calloc: quasi idem ac malloc agit sed syntax aliquanto discrepat et valorem cuiusque loci in zerum ponit. Sententiaint *ptr = calloc(10,sizeof (int)); allocat spatium memoriae10*sizeof(int) et zerum imponit in hos decem locos.
Realloc: sententiaint *ptr = realloc(p, 20*sizeof(int)) mutat ad20*sizeof(int) magnitudinem loci memoriae quemptr indicat, conservans indicatorem ipsum.
ISO/IEC 9899. Documenta officialia de C99, corrigenda technica et rationemc omplectens. Ab anno 2007, versio linguae C ad diem estISO/IEC 9899:TC3.
Harbison, Samuel P., etGuy L. Steele.C: A Reference Manual. Liber excellens qui sicutenchiridion definitivum fungitur vel pro eis quid compilatra de C elaborant. Liber grammaticamBNF linguae C continet.
Press, William H., Saul A. Teukolsky, William T. Vetterling, et Brian P. Flannery.Numerical Recipes in C (The Art of Scientific Computing).ISBN 0521431085.
The C Book, auctoribus M.Banahan, D.Brady, et M.Doran, (Addison-Wesley, 2nd ed.) — Liber pro discipulis tironibus intermediis, non iam in librum impressus qui licet ab interreti depromere.