Sekvan paĝon! Antaŭan paĝon! Indekson! Instrukcion!

Pri C

  1. Ĝeneralaĵoj pri C
  2. La operacisimboloj de C
  3. Kromnomoj de C++
  4. Ekzemplaj C-programoj
  5. Leksiko de C: Provo pri esperantigo

Ĝeneralaĵoj pri C

Programo en C estas kolekto de moduloj. Ĉiu modulo havas formon de teksta dosiero kun la finaĵo .c kaj estas tradukebla aparte. La datumoj, atingeblaj el aliaj moduloj, estas specifendaj en la ĉapo de modulo; kutime tiajn specifojn oni arigas en interfacaj ĉapdosieroj kun la finaĵo .h (ekz-e <stdio.h> en ekzempla programo Duoniga serĉo en C).

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 da deklaroj validaj en la koncerna dosiero. Deklaro de variablofunkcio 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

/* … */
La normo permesas uzi ankaŭ C++-stilajn komentojn, kiujn malfermas // kaj fermas linifino.

Datumtipo en C povas esti simplakunmetita. 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,

int (*rf)(float);
deklaras variablon rf referenci funkcion havantan unu glitpunktan (sekve, reelan) parametron kaj liverantan entjeron. La sintakso de funkcivoko per rf havas tian saman formon:
i = (*rf)(2.78);
(la unua krampoparo necesas por indiki, ke la elreferencado aplikendas al la funkcinomo, ne al la rezulto de la funkcivoko).

C disponigas seon if (linioj 8–10 de la ekzemplo) kaj okazelektan 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

if(n + 1 == x)
anstataŭ
if(x == n + 1)
ĉar se unu egalsigno perdiĝos pro la influo de la tradicia skribo matematika aŭ aparata misfunkcio, la tradukilo plendos pri malebla valorizo n + 1 = x (bedaŭrinde, tio ne helpas se oni bezonas testi x==y).

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).

La operacisimboloj de C

Prioritato Operacisimbolo LoknombroAsociado
1 () [] -> . sizeof i++ i-- 1; 2 dekstren
2 ! ~ - * & (altipigo) ++i --i 1 liven
3 * / % 2dekstren
4 + -
5 << ››
6 < <= ›= ›
7 == !=
8 &
9 ^
10 |
11 &&
12 ||
13 ?: 3 liven
14 = += -= 2
15 , dekstren

Kromnomoj de C++

En C++ la kromnomoj ebligas fari elreferencadon implica, kp
   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; 
     }                         |      } 
   }                           |    }


Sekvan paĝon Indekson Instrukcion