C (programlingvo)

El Vikipedio, la libera enciklopedio
Saltu al: navigado, serĉo

C estas komputila programlingvo kreita de Dennis Ritchie dum la fruaj 1970-aj jaroj por verki la operaciumon Unikso. Ĝi restas la plej vaste uzata lingvo por verki operaciumojn kaj sisteman programaron. Ĝi estas ankaŭ ofte uzata por verki aplikaĵojn, kvankam ĝia populareco en tiu fako jam malpliiĝis pro pli novaj komputillingvoj, ekz. siaj propraj heredantoj C++ kaj Java.

Propraĵoj[redakti | redakti fonton]

C estas meznivela komputillingvo, kio signifas, ke la fonta kodo de programo povas esti tajpita sen detala kono de la CPU-speco de la komputilo. Antaŭ ke oni povas uzi la programon, la fonta kodo devas esti tradukita al la necesa maŝinkodo per tradukilo. Kontraste, programoj verkitaj en simbola maŝinkodo povas esti plenumitaj nur per unu speco de CPU.

La kernaj ecoj de C estas:

  • Fokuso al ordenema programado, kun iloj por programi je struktura stilo.
  • Aliro al malaltnivelaj propraĵoj de la maŝino, ekz. la uzo de referencoj por montri al lokoj en memoro.
  • Parametroj estas ĉiam transdonitaj al funkcioj je valoro, ne laŭ referenco.
  • Leksika regionumado de variabloj (sed neniu subteno por fermoj aŭ funkcioj difinitaj ene de funkcioj).
  • Norma aro de bibliotekaj subprogramoj, kiuj donas ilojn kiuj estas utilaj sed ne strikte necesaj.
  • Uzo de antaŭtraktila komputillingvo, la C-antaŭtraktilo, por taskoj kiel ekz. difini makroojn kaj heredi plurajn dosierojn de fontkodo.

Iuj el ĉi tiuj ecoj ne estas garantiitaj de la diversaj C-normoj. Ekzemple, la C-antaŭtraktilo estas ĝenerale aparta programo, kio permesas, ke dosieroj antaŭtraktiĝu sen devi esti plene tradukitaj, sed ĉi tio ne nepras. Tamen, la plejparto de realigoj de C havas ĉi tiujn ecojn, kaj la komunumo de C-programistoj atendas, ke ili ĉeestu.

Kvankam C estas altnivela komputillingvo, ĝi dividas iujn similaĵojn kun asembla komputillingvo, kaj estas tre pli malaltnivela ol la plejparto de aliaj komputillingvoj. Plej elstare, la programisto povas prizorgi la enhavojn de memoro: defaŭlte, C donas neniujn ilojn por kontroli la limojn de tabeloj kaj aŭtomata rubkolekto (senrubigo). Libera prizorgado de memoro donas al la programisto pli da libereco por ĝustigi la kvalitojn de programo, kio estas aparte grava por programoj kiel peliloj. Tamen, tio ankaŭ faciligas la aperon de cimoj fontantaj el eraraj operacioj je memoro, ekz. bufraj trofluoj (transbordiĝoj). Oni jam verkis ilojn por eviti ĉi tiajn erarojn, i.a. bibliotekojn por kontroli la limojn de tabeloj kaj por rubkolekto, kaj la programon lint por kontroli fontan kodon.

Iuj el la "mankoj" de C jam estis prizorgitaj de pli novaj komputillingvoj, kiuj heredas de C. La programlingvo Cyclone havas ilojn por gardi kontraŭ eraraj uzoj de memoro. C++ kaj Objective C donas ilojn celitajn por helpi objekteman programadon. Java kaj C# aldonas objektemajn ilojn kaj ankaŭ pli altan nivelon de abstrakteco, ekz. aŭtomatan prizorgadon de memoro.

Historio[redakti | redakti fonton]

La komenca prilaboro de C okazis inter 1969 kaj 1973 (laŭ Ritchie, la plej kreema periodo estis dum 1972). Ĝi nomiĝis "C", ĉar multaj propraĵoj devenas de pli frua lingvo kiu nomiĝis B.

Antaŭ 1973, la komputillingvo C estis fariĝinta sufiĉe kapabla, por ke la plejparto de la kerno de la operaciumo Unikso estis reverkita per C. Ĉi tio estis la unua fojo, ke la kerno de operaciumo estis implementita en altnivela lingvo. En 1978, Ritchie kaj Brian Kernighan eldonis la libron The C Programming Language (ankaŭ konata kiel "la blanka libro", aŭ K&R.) Dum multaj jaroj, ĉi tiu libro servis kiel la normo de la lingvo; eĉ hodiaŭ, ĝi estas tre populara kiel referenco kaj lernilo.

C fariĝas tre ege populara ekster Bell Labs dum la 1980-aj jaroj, kaj ĝi estis dum iom da tempo la ĉefa lingvo en programado de aplikaĵoj. Estas ankaŭ la plej uzata lingvo en programado de sistemoj, kaj estas unu el la plej ofte uzataj lingvoj en komputila edukado.

En la malfruaj 1980-aj jaroj, Bjarne Stroustrup kaj aliaj ĉe Bell Labs laboris por aldoni objektemajn ilojn al C. La rezulta lingvo nomiĝas C++. C++ estas nun la komputillingvo plej uzata por komercaj aplikaĵoj ĉe la operaciumo Vindozo. Tamen, C restas pli populara en la Uniksa mondo. La plejparto de Linuksa sistemo, inkluzive de la kerno, estas verkita en C.


Versioj de C[redakti | redakti fonton]

K&R C[redakti | redakti fonton]

C daŭre elvolviĝis de siaj komencoj ĉe Bell Labs. En 1978, la unua eldono de The C Programming Language de Kernighan and Ritchie aperis. Ĝi enkondukis la jenajn ilojn al la jam ekzistantaj versioj de C:

  • struct datumtipo
  • long int datumtipo
  • unsigned int datumtipo
  • La =+ operaciilo estis ŝanĝita al +=, kaj tiel plu (=+ konfuzis la leksikan analizilon de la C-tradukilo).

Dum multaj jaroj, la unua eldono de The C Programming Language estas vaste uzata kiel de-facto-normo de la lingvo. K&R-C estas ofte konsiderata la plej baza parto de la lingvo, kiun C-tradukilo devas subteni. Ĉar ne ĉiuj el la nun uzataj tradukiloj jam estis aktualigitaj por plene subteni ANSI-C, kaj sence bone skribita K&R-kodo estas ankaŭ laŭleĝa ANSI-C, K&R-C estas konsiderata la bazo, ĉe kiu programistoj devus resti, kiam ili deziras maksimuman porteblecon. Ekzemple, la bootstrapping-versio de la tradukilo "GCC", xgcc, estas skribita en K&R-C. Ĉi tio estas pro la fakto, ke multaj el la sistemoj subtenataj de GCC ne havis tradukilon de ANSI-C, kiam GCC estis verkita, nur unu kiu subtenas K&R-C.

Tamen, ANSI-C estas nun subtenata de preskaŭ ĉiuj vaste uzataj tradukiloj. Multe da C-kodo nuntempe skribata uzas ilojn de la lingvoj, kiuj estas preter la originala K&R-normo.

ANSI-C kaj ISO-C[redakti | redakti fonton]

En 1989, C estis unuafoje oficiale normigita de ANSI en ANSI X3.159-1989 "Programming Language C". Unu el la celoj de la ANSI-C-normigado estis produkti superaron de K&R-C. Tamen, la normigaj komitatoj ankaŭ enmetis kelkajn novajn ilojn, pli ol estas normale en komputillingva normigo.

Iuj el la novaj iloj estis "neoficiale" aldonitaj al la komputillingvo post la eldono de K&R, sed antaŭ la komenco de la ANSI-C-normigo, ekz.:

  • funkcioj kun rezulto void
  • funkcioj, kiuj redonas datumtipojn structunion
  • datumtipo void * (sentipa referenco)
  • valorizo por struct-datumtipoj
  • la biblioteko stdio kaj iuj aliaj funkcioj de norma biblioteko havebliĝis kun la plejparto de implementoj (ĉi tiuj jam ekzistis en almenaŭ unu implemento je la tempo de K&R, sed ne estis vere normaj, do ne estis priskribitaj en la libro).

Aliaj iloj estis aldonitaj dum la ANSI-C-normigo mem, plej rimarkinde funkciaj prototipoj (prenitaj de C++). La ANSI-C-normo ankaŭ bazigis norman aron de bibliotekaj funkcioj.

La normo ANSI-C kun kelkaj etaj ŝanĝoj, estis adoptita kiel ISO-normo numero ISO 9899.

C99[redakti | redakti fonton]

Post la ANSI-normigado, la C-lingva normo restis relative stabila dum iom da tempo, kvankam C++ daŭre evoluis. (Fakte Normative Amendment 1 kreis novan version de la komputillingvo C en 1995, sed ĉi tiu versio estas malofte agnoskata.) Tamen, la normo estis reviziita en la malfruaj 1990-aj jaroj, kio rezultis en ISO 9899:1999, eldonita en 1999. Ĉi tiu normo estas kutime nomita "C99".

La novaj ecoj aldonitaj al C99 estas inter alia:

  • inline functions (funkcioj vokataj per tekstokopio)
  • libera lokado de deklaroj de variabloj (laŭ la ekzemplo de C++)
  • aldono de pluraj novaj datentipoj, inkluzive de long long int (por pli glata transiro de 32-bitaj al 64-bitaj maŝinaroj), eksplicita bulea datentipo kaj tipo reprezentanta kompleksajn nombrojn.
  • tabeloj de variaj longecoj
  • oficiala subteno por komentoj, kiuj komenciĝas per // kiel en C++ (jam subtenitaj de multe da C89-tradukiloj kiel ne-ANSI-a etendigo
  • snprintf

Intereso pri subteni la novajn C99-ecojn estas miksita. Dum GCC kaj kelkaj komercaj tradukiloj subtenas la plejparton de la novaĵoj de C99, la tradukiloj eldonitaj de Microsoft kaj Borland ne subtenas, kaj ĉi tiuj du firmaoj ne ŝajnas interesataj pri aldoni tian subtenon.


"Saluton, mondo!" en C[redakti | redakti fonton]

La jena simpla aplikaĵo printas "Saluton, mondo!" al la normo-eligo-dosiero (kiu estas kutime la ekrano, sed povas esti dosiero aŭ iu alia aparato). Ĝi aperis la unuan fojon en K&R.

#include <stdio.h>
 
int main(void)
{
    printf("Saluton, mondo!\n");
    return 0;
}

Anatomio de C-programo[redakti | redakti fonton]

C-programo konsistas de funkcioj kaj variabloj. C-funkcioj estas kiel la subrutinoj kaj funkcioj de Fortran aŭ la ordonoj kaj funkcioj de Pascal. La funkcio main estas speciala pri ke la programo komencas plenumiĝi ĉe la komenco de main. Ĉi tio signifas, ke ĉiu C-programo devas enhavi funkcion main.

La funkcio main kutime vokos aliajn funkciojn por helpi fari sian taskon, ekz. printf en la supra ekzemplo. La programisto povas verki iujn funkciojn kaj vokos aliajn el bibliotekoj. En la ĉi-supra ekzemplo return 0 donas la elirstaton de la funkcio main. Ĉi tio signifas sukcesan plenumon de la programo al vokinta ŝelo.

C-funkcio konsistas el elirtipo, nomo, listo de parametroj (aŭ void en krampoj se estas neniu) kaj funkcia bloko. La sintakso de la funkcia bloko egalas al parenteza ordono.

Ĉi tiu artikolo (aŭ pli frua versio de ĝi) enhavas materialon el FOLDOC, uzitan je permeso (Public Domain Resources/Foldoc license)

Vidu ankaŭ[redakti | redakti fonton]