C (idioma)

De la Viquipèdia, l'enciclopèdia lliure.
Saltar a la navegació Saltar a la cerca
C.
llenguatge de programació
C Logo.png
Autor Dennis Ritchie
Data d’origen 1972
Última versió C18
Ús Genèric (alta eficiència)
Paradigmes imperatiu processal
Escrivint Estàtic
Extensions comunes .c per a fonts i .h per a capçaleres
Influenciat per BCPL , B , ALGOL
Va influir Molts, incloent C ++ , Objective-C , C # , Swift , D

En computació , C és un llenguatge de programació imperatiu naturalesa processal ; Els programes escrits en aquest llenguatge es componen d'expressions matemàtiques i les instruccions obligatòries agrupades en procediments parametritzats capaços de manejar diversos tipus de dades .

Es defineix com un llenguatge de programació d'alt nivell [1] [2] [3] i s'integra característiques dels llenguatges de baix nivell , és a dir, caràcters , números i adreces , que pot ser indicada per mitjà de l'aritmètica i operadors lògics que utilitzar les màquines reals [4] . El C ha estat dissenyat per a ser racionalitzat i eficient, també es beneficia de moltes biblioteques per fer front a qualsevol tipus de requisit, en particular, la biblioteca estàndard C . Aquestes biblioteques, en forma d'arxius de capçalera o fitxers amb el sufix -h, es poden carregar utilitzant la directiva include d'el preprocessador .

Història

El llenguatge va ser desenvolupat originalment per Dennis Ritchie [5] en els Laboratoris Bell de AT & T entre 1969 i 1973, amb l'objectiu d'utilitzar-per a l'elaboració de sistema operatiu UNIX , anteriorment feta per Ken Thompson i Ritchie mateix conjunt de la PDP-7 . El 1972 es va estrenar el primer sistema UNIX amb un DEC PDP-11 , escrit completament amb el nou llenguatge de programació C. [6] El 1978 , la publicació del llibre The language C va fer créixer ràpidament, cosa que va provocar el naixement de diversos dialectes i d’aquí la necessitat de definir un estàndard.

La primera normalització de C es va fer a partir 'ANSI en 1989 (ANSI X3.159-1989), conegut com C89. La mateixa versió, únicament amb canvis menors de formatar, va ser més tard també per estandarditzat ' ISO 1990 (ISO / IEC 9899: 1990), conegut com C90. Posteriorment, la ISO va publicar altres quatre versions del llenguatge C, conegudes com C95 (ISO / IEC 9899 / AMD1: 1995), C99 (ISO / IEC 9899: 1999), C11 (ISO / IEC 9899: 2011 / Cor 1: 2012) i C18 (ISO / IEC 9899: 2018). D'aquests, el C99 ha portat millores importants per al llenguatge de programació, la introducció de nous tipus de dades, inicializadores designats per les matrius, les matrius de mida variable i altres millores presos de C ++ .

Descripció

Nascut juntament amb Unix , C és recolzada per la totalitat dels sistemes operatius dels empleats d'ampli ús i s'utilitza principalment per a la realització de sistemes operatius ,llenguatges de programació , biblioteques , jocs i aplicacions d'alt rendiment; És conegut per la seva eficiència i s'ha consolidat com un idioma de referència per a la realització de programari de sistema en la majoria de plataformes de maquinari modern. L'estandardització de la llengua (la part abans de l' ' ANSI i després dell' ISO ) assegura la portabilitat dels programes escrits en C (estàndard, sovint es diu ANSI C) en qualsevol plataforma; a més de l'programari de sistema, que ha estat durant molt de temps la llengua dominant en una varietat d'altres dominis d'aplicació caracteritza centrat en l'eficiència. Exemples típics són les telecomunicacions , el control dels processos industrials i el programari de sistema en temps real . El predomini de C en aquests contextos està parcialment va disminuir després de la introducció d'alternatives significatives, especialment el C ++ .

El C també té una considerable importància educativa, tot i que, per la seva complexitat semàntica i sòlides relacions de tals semàntica amb l'operació de ' maquinari de l' ordinador , no és una llengua particularment intuïtiva per a novells i, sobretot, per a aquells sense una preparació adequada en relació amb els " electrònics calculadores. On una vegada els cursos de secundària i universitaris van adoptar el C com l'idioma de referència causa de la seva importància tècnica, aquesta elecció avui dia és una motivació addicional en la creixent importància de les llengües de C derivat (per exemple, C ++ , Java i C # i, a permetre als estudiants un enfocament inicial més ràpid i intuïtiu, llenguatges d'alt nivell com Python ).

Característiques generals

C és un llenguatge de programació relativament minimalista; la seva semàntica utilitza un conjunt restringit de conceptes relativament simples i propers al funcionament del maquinari de l'ordinador. Moltes instruccions de C es poden traduir directament amb una sola instrucció de llenguatge de màquina (per exemple, la operadors d'auto increment i decrement ). En el llenguatge, un paper central és ocupat pel concepte d'un punter , que es generalitza per coincidir amb l'adreçament indirecte, una manera d'accedir a la característica de memòria de maquinari de tots els moderns CPU . Això fa que C sigui un llenguatge especialment eficient. A més, per al llenguatge assemblador, C té una estructura més definida i llegible lògic, funcions estil Pascal i especialment la comprovació de tipus (en temps de compilació), que està completament absent en llenguatge assemblador.

La sintaxi de C és molt versàtil i el llenguatge està en forma lliure , que li permet escriure instruccions complexes en unes poques línies de codi o crear programes críptics i il·legibles ( codi d'ofuscació ). En última instància, l'èxit de C va ser dictat per ser un llenguatge creat per programadors experimentats, per ser utilitzat per programadors experimentats.

Aquesta gran llibertat, la complexitat sintàctica del llenguatge (que, com hem vist, conté poques instruccions bàsiques) i el paper central dels indicadors, que cal utilitzar pràcticament des dels primers programes, el converteixen en un llenguatge difícil i desaconsellable per a neòfits, que cauen gairebé immediatament en una sèrie de trampes que, tot i que són evidents per a un expert, són molt difícils de detectar per a un principiant.

Gràcies a l'eficàcia particular d'el codi de producte per les seves compiladors, la C es va utilitzar per reescriure gran part de el codi de sistema UNIX , reduint l'ús de llenguatge d'acoblament a un petit grup de funcions. La seva importància, però, va créixer només després de 1978 amb la publicació, per Brian Kernighan i Dennis Ritchie , el llibre El llenguatge de programació C , en el qual es va definir amb precisió el llenguatge.

El seu següent ús molt ampli dut a l'aparició dels diferents dialectes i per tant la necessitat de definir un estàndard. Amb aquesta finalitat, en l'estiu de 1983 , es va designar un comitè amb la tasca de crear un ANSI ( American National Standards Institute ) que defineix el llenguatge C una vegada per totes. El procés de normalització, que va tenir sis anys (molt més del que s'esperava), va acabar al desembre de 1989 , i les primeres còpies va arribar a estar disponible a principis de 1990 . Aquesta versió de C es denomina normalment C89. La norma també va ser adoptada per 'l'Organització Internacional de Normalització ( ISO ) en 1999 sota el nom de C estàndard ANSI / ISO. En 1995 , es va aprovar l'Esmena 1 a C estàndard que, entre altres coses, ha afegit noves característiques a les biblioteques estàndards de l'llenguatge. Utilitzant com un document base, el C89 amb l'esmena 1 i unir-se a la utilització de classes d' Simula , Bjarne Stroustrup va començar a desenvolupar C ++ .

El resultat final de l'evolució contínua de la norma C es va promulgar en 1999 , coneguda com ISO C99 (codi ISO 9899).

Amb la versió C11 (2011) algunes ordres es revisen lleugerament, mentre que la versió C18 (2018) ha corregit alguns aspectes crítics del C11, però no ha introduït cap novetat.

Funcions d'algunes versions

C99

  • El tipus de dades _Bool , que admet l'emmagatzematge de fals booleà i veritable;
  • El tipus de dades _Complex per a la representació dels nombres complexos;
  • El tipus de dades _Imaginary per a la representació dels nombres imaginaris;
  • El tipus de dades long long int ;
  • El tipus booleà en <stdbool.h> ;
  • La funcionalitat addicional de coma flotant <float.h> ;
  • Comentaris d'una sola línia introduïts per //;
  • Les funcions inline ;
  • El qualificador de tipus restrict , només es permet el punter punters (restringit);
  • Es retira el ' int rendiment implícit;
  • La matriu de longitud variable (VLA);
  • Literals compostos;
  • Inicialitzadors designats
  • Es permet declarar variables en qualsevol lloc que vulgueu dins d'un bloc de codi, així com interposar altres instruccions entre elles;
  • Les funcions de la família vscanf;
  • Les regles per a constants de tipus enter;
  • Les regles per a la promoció de enters (promoció de nombres enters);
  • El tipus genèric macro matemàtic en <tgmath.it> ;
  • Macros amb un nombre variable d'arguments;
  • La macro va_copy ;
  • L'especificador de conversió% lf a la funció printf ();
  • Suport per a l'aritmètica de punt flotant IEEE (IEC 559);
  • L'operador de pre-processament _Pragma .

C11

L'estàndard C11 va introduir cinc nous fitxer de capçalera, o <stdalign.h> , <stdatomic.h> , <stdnoreturn.h> , <threads.h> i <uchar.h> , així com diverses característiques que han ajudat a millorar llenguatge:

  • La macro inherent a les especificacions d'alineació de la memòria amb l'arxiu de capçalera associada <stdalign.h> , incloent _Alignas i _Alignof , així com la funció aligned_alloc (memòria de control d'alineació);
  • S'ha afegit suport per a múltiples fils. Les noves característiques són proporcionats pels fils de la biblioteca declarats a l'arxiu de capçalera <threads.h> . També s'ha afegit el tipus de classificació _Atomic arxiu de capçalera <stdatomic.h> ;
  • Les estructures ( struct ) i sindicats ( union ) anònims;
  • Expressions genèriques utilitzant la paraula clau _Generic (expressions de tipus genèric);
  • Suport Unicode millorat amb els tipus de dades char16_t (UTF-16) i char32_t (UTF-32) amb les funcions de conversió relatives declarada en <uchar.h> ;
  • Eliminat la funció gets() declarada en <stdio.h> ;
  • El especificador _Noreturn aplicable a funcions;
  • Afirmacions estàtiques per paraula clau _Static_assert (estàtiques assercions);
  • La funció quick_exit per a la terminació d'un programa;
  • Interfícies de comprovació de límits (annex K);
  • Característiques d'anàlisi (annex L);
  • La manera exclusiu " x arxius" obrir i crear (Exclusiu manera de creació-i-obert):
  • Les macros per a la creació de nombres complexos en <complex.h> .

Paraula clau

El llenguatge C, com qualsevol altre llenguatge de programació, permet la creació de programes mitjançant un conjunt de "paraules clau".

L'estàndard ANSI definia el conjunt de paraules clau següent: auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, curt, signat, sizeof, estàtic, struct, commutador, typedef , unió, sense signar, buit, volàtil, mentre que.

Exemple de programa

Hola món!

Icona de la lupa mgx2.svg El mateix tema en detall: Hola món .

El següent exemple imprimeix el text " Hola món! " ( "Hola món!") A la sortida estàndard (que normalment coincideix amb la pantalla de l' terminal d' utilitzat per aquells que dirigeixen el programa). En educació informàtica, l’ús d’introduir els fonaments d’un llenguatge de programació amb un programa que imprimeix "Hola món!" deriva d'aquest famós exemple, basats en el llibre El llenguatge C de Kernighan i Ritchie.

 #include <stdio.h>
    
int main ()
{ 
   printf ( "Hola món \ n");
   retorn 0 ;
}

El següent és un anàlisi línia per línia del programa que es mostra; aquest tipus d'escriptura només és executable en sistemes basats en UNIX.

 #include <stdio.h>

Aquesta línia és una directiva per al preprocessador . El preprocessador és un programa (o un mòdul d'un entorn integrat ) que realitza algunes transformacions preliminars de l' codi font , abans que sigui lliurat a l' compilador en si. En aquest cas, el processament requerit és reemplaçar la línia en qüestió amb tot el contingut de la capçalera de l'arxiu ( "arxius de capçalera") " stdio.h ". La presència de parèntesis angulars indica que l'arxiu està en un directori estàndard conegut pel preprocessador. Per incloure una capçalera (normalment creada pel programador) present a la mateixa carpeta on es troba el fitxer a compilar, utilitzeu una sintaxi com:

 # Include "nomeheader.h"

Amb el nom en lloc de capçalera nomeheader desitjada. Un arxiu de capçalera en C, és un arxiu que conté declaracions de tipus de dades i funcions ; en aquest cas, s'inclou en la font de presentar la declaració de la funció de la biblioteca estàndard printf. Aquesta afirmació, que especifica quins tipus de paràmetres és necessari i permès atorgar printf i quin tipus és el seu valor retornat. Totes dues dades seran utilitzades pel compilador per verificar que l'ús que "Hola món!" fa que aquesta funció sigui correcta.

En lloc de printf també pot utilitzar els puts , escrit com

 puts ( "Hola món!");
 int main ()

Una línia d'aquest tipus és el començament d'una definició de funció, en aquest cas la funció main . La funció main és el punt d'entrada d'un programa en C: l'execució de l'programa s'inicia des de la primera instrucció de la main i acaba amb l'últim. Qualssevol altres funcions que entren en joc només si i quan se li crida (directament o indirectament) de la main . En absència d'una funció main , el compilador no pot produir un programa executable (però pot produir una biblioteca).

La paraula clau inicial int representa el tipus de valor retornat per la funció. En el cas especial de la main , s'interpreta com el valor de retorn de tot el programa per al sistema operatiu . D'acord amb una convenció universal sobre els valors retornats pel programa de sistema, la main sempre retorna un enter, encara que alguns textos de tornada, portin també erròniament declaracions de la funció main amb el tipus de retorn void (veure ANSI C ).

 {

Els suports s'utilitzen en C per indicar el principi i el final d'un bloc, una unitat de programa; en aquest cas, la funció main .

 printf ( "Hola, món! \ n");

Aquesta línia constitueix una trucada de funció; en altres paraules, requereix que es faci la funció. printf és una funció de la biblioteca estàndard C que imprimeix un missatge a la sortida estàndard . Per tant, la pantalla mostrarà el missatge Hola, món! (Sense cometes, que s'utilitzen en el codi font per a indicar el començament i el final de la cadena ).

"\ N" és una seqüència d'escapament, és a dir , una seqüència de caràcters (que en C sempre comencen amb el caràcter "\") que es traduirà en compilar-la en un sol caràcter (normalment no imprimible o interpretada d'una altra manera) . En particular, "\ n", es tradueix en el caràcter de nova línia que, quan s'utilitza amb les biblioteques estàndard en mode text (com amb printf ), indica l'avanç de línia i retorn de carro de el text. Així que si el programa s'utilitza de forma interactiva, en general un desplaçament de l' cursor .

El punt i coma final de la línia indica el final de la sentència (la trucada a la funció).

 retorn 0 ;

Una instrucció va començar amb la paraula clau return , dins d'una funció, acaba la mateixa funció i especifica un valor de retorn (si la funció es pot tornar un). En el cas particular de la main , com s'ha dit anteriorment, aquest valor serà retornat a sistema operatiu ( 0 és el valor de retorn a el sistema que, convencionalment, indica la terminació d'un programa amb èxit).

Exemple de calculadora

Exemple de calculadora que realitza la suma, el producte, la diferència i la quota de dos enters:

 #include <stdio.h> // Especifica la biblioteca utilitzada pel programa

int main () {
int a ; // Primer valor
b int; // Segon valor
int suma; // Suma dels dos valors
producte int; // Producte dels dos valors
diferència int; // Diferència dels dos valors
quoto int; // Quoto dels dos valors
    
printf ( "Introduïu el primer nombre:"); // Imprimeix a la consola
scanf ( "% d", i a); // Llegiu un valor enter i "inseriu-lo" a la variable "a"
    
printf ( "Introduïu el segon nombre:"); // Imprimeix a la consola
scanf ( "% d", ib); // Llegiu un valor enter i "inseriu-lo" a la variable "b"
    
suma = a + b; // Calculeu la suma del contingut de la variable "a" i la de "b" i "inseriu-la" a la variable "suma"
producte = a * b; // Calcula el producte del contingut de la variable "a" i el de "b" i "l'insereix" a la variable "producte"
diferència = a - b; // Calculeu la diferència entre el contingut de la variable "a" i el de "b" i "inseriu-la" a la variable "diferència"
    
si (b! = 0) {// Comprovar que la variable "b" conté un valor diferent de 0
quoto = a / b; // Calculeu el quocient del contingut de la variable "a" i el de "b" i "inseriu-lo" a la variable "quoto"
}
    
printf ( "La suma i ':% d \ n", suma); // Imprimiu a la consola una cadena amb el valor de la variable "suma"
printf ( "El producte i ':% d \ n", el producte); // Imprimiu a la consola una cadena amb el valor de la variable "producte"
printf ( "La diferència i ':% d \ n", diferència); // Imprimiu a la consola una cadena amb el valor de la variable "diferència"
si (b! = 0) {// Comprovar que la variable "b" conté un valor diferent de 0
printf ( "El quoto i ':% d \ n", quoto); // Imprimiu una cadena a la consola amb el valor de la variable "quoto"
}
    
retorn 0 ; // Torneu 0 i finalitzeu el programa
}

Explicació

  • "int" defineix les variables com a enters (a, b, suma, producte, diferència i quoto són variables)
  • "printf" és la instrucció que imprimirà el contingut de les cometes a la pantalla
  • "scanf" llegeix l'entrada i la col·loca a la variable ("& a"). En aquest cas, en nombres decimals ("% d")
  • "+", "*", "-", "/" són, respectivament, els operadors de suma, producte, diferència i dimensió
  • La sintaxi "if ()" comprova si el contingut dins dels claudàtors és cert. Si és així, executa les funcions dins dels claudàtors (en aquest cas: "quoto = a / b")
  • La sintaxi "! =" Significa "diferent". En aquest exercici es comprova si "b" és diferent de 0; si es realitza una divisió amb un divisor igual a 0, el programa entrarà en error.
  • "La suma és:"% d ", suma En lloc de"% d "s'imprimirà el contingut de" suma "(% d significa que s'imprimirà un nombre enter)
  • "retorn" és la paraula clau que indica la finalització de la funció, retornant el valor 0. La finalització de la funció main () també provoca la finalització del programa.

Seqüències d'escapament

Seqüència Nom del tipus de lletra
\ a bip
\ b retrocés
\ f FF - avanç de pàgina (salt de pàgina)
\ n LF - avanç de línia o de línia nova
\ r CR - retorn de carro (cistella - cursor a el principi de la línia)
\ t pestanya horitzontal
\ v pestanya vertical
\\ \ (barra invertida)
\ ' '(superíndex)
\ " "(cometes dobles)
\ 0 NULL (caràcter nul o de final de cadena)

Idiomes relacionats

Molts dels principals llenguatges de programació moderns s’inspiren en C i hereten part de la seva sintaxi. Alguns llenguatges (com Java , C ++ , C # i C Objectiu ) conservar gran part de la sintaxi de C i estendre-ho a un millor suport diferents paradigmes de programació, mentre que altres idiomes modernitzar la sintaxi, però tracten de mantenir els mateixos paradigmes i dominis d'aplicació de C, com la programació de sistema (per exemple, Go ) o sistemes integrats (per exemple, Zig ).

C ++

Icona de la lupa mgx2.svg El mateix tema en detall: C ++ .

El llenguatge de programació C ++ va ser derivat originalment de C. No obstant això, no tots els programes en C són vàlides en C ++. Mentre que C i C ++ van evolucionar independentment, han augmentat la seva incompatibilitat [7] . La versió C99 va crear una sèrie de conflictes més. Les diferències dificulten l'escriptura de programes i biblioteques que funcionen tant en C com en C ++, i creen confusió per a aquells que programen en ambdós idiomes. La disparitat fa que sigui difícil per a ambdues llengües adoptar característiques de l’altra.

Bjarne Stroustrup , el creador de C ++, s'ha suggerit en diverses ocasions [8] que les incompatibilitats entre C i C ++ han de minimitzar tant com sigui possible per maximitzar la interoperabilitat entre els dos idiomes. Altres han argumentat que, atès que C i C ++ són llenguatges diferents, la compatibilitat entre els dos és útil, però no és vital. Segons aquesta posició, els esforços per reduir la incompatibilitat no haurien de dificultar els intents de millorar les llengües de manera autònoma.

Avui en dia, les diferències principals (a part de l’addició en C ++ de classes, plantilles, espais de noms, sobrecàrrega) entre els dos idiomes són:

  • inline - les funcions en línia tenen l'abast global en C ++,
  • El tipus bool el C99 es defineix en el <stdbool.h> . El C estàndard anterior no va definir un tipus booleà, i diversos (incompatibles) mètodes es van utilitzar per simular el tipus booleà.
  • Les constants de caràcters individuals tenen la mida d'un int en C i un char en C ++.
  • Paraules clau addicionals s'introdueixen en C ++, i per tant no es poden utilitzar com a identificadors com estava permès en C (per exemple, try , catch , template , new , delete , ...)
  • En C ++, el compilador crea automàticament una etiqueta per a cada struct , union o enum , i struct S {}; en C ++, en C és equivalent a typedef struct S {} S; .

Objectiu-C

Icona de la lupa mgx2.svg El mateix tema en detall: Objectiu C .

El llenguatge Objective C deu la seva popularitat a illa el va elegir com a base per als seus sistemes operatius Mac OS , iOS , watchos i TVOS . És un llenguatge orientat a objectes i, a diferència de l' C ++ , conserva plena compatibilitat amb el C.

En 2014, Apple presenta un nou idioma, Swift qui va reemplaçar de programació Objective C en els sistemes operatius anteriors.

Nota

  1. ^ Oualline , pàg. 8 .
  2. ^ Kochan , pàg. 1 .
  3. ^ Deitel , pàg. 7 .
  4. ^ El llenguatge C - Introducció a la Programació i Manual de Referència (Segona Edició) - Brian W. Kernighan, Dennis M. Ritchie, Pearson Prentice Hall, pàg. Introducció - XIV.
  5. ^ Dennis Ritchie i Brian Kernighan, XI , en el manual d'estàndards de programació de l'llenguatge C i de referència, Prentice Hall, 2004, pàg. 320.
    "El C va ser dissenyat i escrit per al sistema operatiu UNIX, el DEC PDP-11, per Dennis Ritchie."
  6. ^ (ES) Dennis Ritchie, El Desenvolupament de l'Llenguatge C (PDF), dels Laboratoris Bell / Lucent Technologies, 1993. Obtingut de maig de 2017, l'1.
    "C va sorgir els anys 1969-1973, en paral·lel al primer desenvolupament del sistema operatiu Unix; el període més creatiu es va produir durant 1972 ".
  7. ^ Incompatibilitats entre ISO C i ISO C ++ , en david.tribble.com.
  8. ^ Rivalitat entre germans: C i C ++ (PDF) en research.att.com.

Bibliografia

Articles relacionats

Altres projectes

Enllaços externs

Controllo di autorità LCCN ( EN ) sh85018532 · GND ( DE ) 4113195-2 · BNF ( FR ) cb119665180 (data)
Informatica Portale Informatica : accedi alle voci di Wikipedia che trattano di informatica