Por ricevi plenumeblan programon necesas bindi la dise kompilitajn modulojn.
Normale C-modulo estas unue antaŭtraktata, poste tradukata. La plej ofte uzataj antaŭtraktilaj rimedoj estas la komandoj #include («inkludu»; ĝi kvazaŭ kopias sian operandan dosieron en la lokon kie ĝi aperas) kaj #define («difinu»; ofte uzata por difini konstantojn, kiel en nia ekzemplo). Krome, uzante la antaŭtraktilon eblas esperantigi la vortosimbolojn de C (Leksiko de C).
C-modulo estas sekvenco de deklaroj validaj en la koncerna dosiero. Deklaro de variablo aŭ funkcio estas aŭ loka al la dosiero (static, «statika»), aŭ malloka kaj valida por la tuta programo (extern, «ekstera»). Por uzebligi mallokajn nomojn en aliaj moduloj, la koncernajn deklarojn (eventuale, iom reduktitajn) necesas meti en interfacan ĉapdosieron, inkludotan en ĉiun uzantan modulon. (Tio estas analogia al la difinaj kaj realigaj moduloj de MODULA.) La deklaroj povas enteni oportunan komencvalorizon.
La tekston de C-modulo oni povas sufiĉe libere intermiksi kun komentoj; la komentaj krampoj havas la formon
Datumtipo en C povas esti simpla aŭ kunmetita. Inter la unuaj C disponigas plurajn entjerajn kaj reelajn tipojn, por difini la duajn, kvin tipkonstruilojn: tabelo, rikordo struct, referenco, unio, funkcio; krome, estas fikcia vakua tipo void. Per tipdifina frazo typedef (la 3a linio de la ekzempla programo Duoniga serĉo en C) oni povas atribui al datumtipo nomon.
C havas unuecan sintakson por difini kunmetitan datumtipon kaj por esprimi ties malkomponon (atingi anojn de kunmetita valoro, voki funkcion ktp). Ekz-e,
C disponigas seon if (linioj 8–10 de la ekzemplo) kaj kazan ordonon switch por branĉado, komenckondiĉan iteracion while (linioj 6–11 de la ekzemplo), tre lozan nombrilan iteracion for (kiu eventuale povas esti sennombrila), funkcivokon kaj revenordonon (linioj 8 kaj 12), tre oportunan parentezan ordonon (inter «{» kaj «}», ekz-e la korpo de la iteracio). C havas markojn kaj saltojn, sed ankaŭ pli altnivelajn elirejojn break, return kaj iom pli specialan continue, per kiuj oni povas pli facile eviti markojn ol en Paskalo.
La pli granda parto de C-programo konsistas el esprimoj. Simile al ALGOL-68 kaj malsimile ol Paskalo kaj Ada, C estas «esprimema» lingvo. Tio signifas, ke multaj programfrazoj, kiujn oni tradicie rigardas ordonoj — precipe la valorizo — en C estas uzebla en esprimoj (tiel estas en la linio 8).
Laŭ Fortrana tradicio la valorizo estas signata per =, por la egalaĵo uzendas ==. Tio estas fonto de malfacile troveblaj eraroj por programistoj edukitaj en la tradicio de ALGOL (ekz-e por mi). La problemo estas pli severa ol en FORTRAN, ĉar C permesas havi valorizojn en kondiĉoj. Por fari tiajn erarojn pli kontroleblaj iuj preferas skribi
La operacisimboloj en C havas 15 prioritatojn, kio estas tro multe por averaĝa homo, kaj la prudentuloj ne ŝparas krampojn. Por pliaj detaloj vd ekzemplojn (Paralelaj tekstoj en C kaj Paskalo).
Prioritato | Operacisimbolo | Loknombro | Asociado |
---|---|---|---|
1 | () [] -> . sizeof i++ i-- | 1; 2 | dekstren |
2 | ! ~ - * & (altipigo) ++i --i | 1 | liven |
3 | * / % | 2 | dekstren |
4 | + - | ||
5 | << ›› | ||
6 | < <= ›= › | ||
7 | == != | ||
8 | & | ||
9 | ^ | ||
10 | | | ||
11 | && | ||
12 | || | ||
13 | ?: | 3 | liven |
14 | = += -= | 2 | |
15 | , | dekstren |
void ordigu(int *p, int *q) | void ordigu(int &p, int &q) { int t; | { int t; if(*p > *q){ | if(p > q){ t = *p; | t = p; *p = *q; | p = q; *q = t; | q = t; } | } } | }