# ANSI C

ANSI C és un estàndard tècnic publicat per l'Institut Nacional Nord-americà d'Estàndards (ANSI), per al llenguatge de programació C. Es recomana als desenvolupadors de programari en C que compleixin amb els requisits descrits en el document per facilitar així la portabilitat del codi.

## Història d'ANSI C i ISO C

El primer estàndard que es va publicar per VV va ser el d'ANSI, si bé aquest estàndard va ser adoptat posteriorment per la International Organization for Standardization (ISO) i revisions posteriors publicades per ISO han estat adoptades per ANSI. El terme ANSI C s'empra més sovint en la indústria que ISO C. Un terme més neutral és estàndard C.

### C89

El 1983, el American National Standards Institute creó un comité, el X3J11, para establecer una especificación estándar para C. Tras un largo y arduo proceso, el estándar se terminó el 1989 i revisions posteriors publicades per ISO han estat adoptades per ANSI. El terme ANSI C és d'ús més freqüent en la indústria que ISO C. Un terme més neutral és estàndard C.

### C90

El 1990, l'estàndard ANSI C (amb algunes modificacions menors) va ser adoptat per la International Organization for Standardization sota la denominació ISO / IEC 9899: 1990. Aquesta versió es coneix com a C90, si bé "C89" i "C90" són, a efectes pràctics, el mateix llenguatge de programació.

### C99

El març de 2000, ANSI va adoptar l'estàndard ISO / IEC 9899: 1999. A aquest estàndard se li coneix com a C99.

### C11

"C11"és el nou estàndard per al llenguatge de programació C.

## Compatibilitat amb alguns compiladors importants

ANSI C és compatible per gairebé tots els compilador és, atès que la gran part del codi escrit en C està basat en ANSI C. Es dona per fet que qualsevol programa escrit només segons l'estàndard C sense dependència alguna de maquinari es compila d'una forma correcta en qualsevol plataforma amb una implementació d'acord amb C. Si no es prenen aquestes mesures, la majoria de programes només podran compilar-se en una plataforma determinada o amb un compilador en particular. Per exemple, per utilitzarbiblioteques no estàndard, com ara biblioteques Graphical user interfície | GUI, o per confiar en atributs específics del compilador o d'una plataforma, com ara la mida exacte de determinats tipus de dades i endianness de bytes.

### Com detectar la compatibilitat

Per minimitzar les diferències entre C K&R i l'estàndard ANSI C, pot utilitzarse __STDC__, el macro ("estándar c") per dividir el codi entre seccions ANSI y K&R.
És preferible utilitzar "#if __STDC__" com en l'exemple superior en lloc de "#ifdef __STDC__" perquè algunes implementacions poden atorgar a __STDC__ el valor zero per indicar que no són compatibles amb ANSI. "#if" s'encarregarà de substituir per zero (0) tots aquells identificadors que no van poder ser substituïts per un macro. D'aquesta manera encara que el macro __STDC__ no està definit "#if" funcionará.
En l'exemple de dalt s'ha utilitzat un prototip en la declaració d'una funció per implementacions compatibles amb ANSI, mentre que una declaració obsoleta -que no és cap prototipo- s'usa de manera diferent. Encara que són compatibles amb C99 i C90, no es recomana el seu ús.

## Compiladors compatibles amb ANSI C

* GCC
* Visual C++|Microsoft Visual C++ (C90. Algunes característiques de C99) (MSVC no és compatible amb C99)
* ARM RealView

## Enllaços externs

* ISO C working group
* Draft ANSI C Rationale (ANSI X3J11/88-151) (Nov 18, 1988)
* Object oriented programming with ANSI-C. Hanser, Hanser. ISBN 3-446-17426-5.