ANSI C
ANSI C es un estándar publicado por el Instituto Nacional Estadounidense de Estándares (ANSI), para el lenguaje de programación C. Se recomienda a los desarrolladores de software en C que cumplan con los requisitos descritos en el documento para facilitar así la portabilidad del código fuente.
Historia de ANSI C e ISO C
[editar]El primer estándar que se publicó para C fue el de ANSI, si bien este estándar fue adoptado posteriormente por la International Organization for Standardization (ISO) y revisiones posteriores publicadas por ISO han sido adoptadas por ANSI. El término ANSI C es de uso más frecuente en la industria que ISO C. Un término más neutral es estándar C.
C89
[editar]En 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ó en 1989 y se ratificó como ANSI X3.159-1989 "Programming Language C." A esta versión del estándar se le conoce como "ANSI C", o también "C".
C90
[editar]En 1990, el estándar ANSI C (con algunas modificaciones menores) fue adoptado por la International Organization for Standardization bajo la denominación ISO/IEC 9899:1990. A esta versión se le conoce como C90, si bien "C89" y "C90" son, a efectos prácticos, el mismo lenguaje de programación.
C99
[editar]En marzo de 2000, ANSI adoptó el estándar ISO/IEC 9899:1999. A este estándar se le conoce como C99.
C11
[editar]"C11" es el nuevo estándar para el lenguaje de programación C.
Compatibilidad con algunos compiladores importantes
[editar]ANSI C es compatible por casi todos los compiladores, dado que la gran parte del código escrito en C está basado en ANSI C. Se da por hecho que cualquier programa escrito sólo según el estándar C sin dependencia alguna del hardware se compila de forma correcta en cualquier plataforma con una implementación conforme con C. Si no se toman estas medidas, la mayoría de programas sólo podrán compilarse en una plataforma determinada o con un compilador en particular. Por ejemplo, por utilizar bibliotecas no estándar, tales como bibliotecas GUI, o por confiar en atributos específicos del compilador o de una plataforma, tales como el tamaño exacto de determinados tipos de datos y endianness de bytes.
Como detectar la compatibilidad
[editar]Para minimizar las diferencias entre C K&R y el estándar ANSI C, puede utilizarse __STDC__
, el macro ("estándar c") para dividir el código entre secciones ANSI y K&R.
#if __STDC__
extern int getopt(int, char * const *, const char *);
#else
extern int getopt();
#endif
Es preferible utilizar "#if __STDC__
" como en el ejemplo superior en lugar de "#ifdef __STDC__
" porque algunas implementaciones pueden otorgar a __STDC__
el valor cero para indicar que no son compatibles con ANSI. "#if
" se encargará de sustituir por cero (0
) todos aquellos identificadores que no pudieron ser sustituidos por un macro. De esta forma incluso si el macro __STDC__ no está definido "#if
" funcionará.
En el ejemplo de arriba se ha utilizado un prototipo en la declaración de una función para implementaciones compatibles con ANSI, mientras que una declaración obsoleta -que no es ningún prototipo- se usa de forma diferente. Aunque son compatibles con C99 y C90, no se recomienda su uso.
Compiladores compatibles con ANSI C
[editar]- GCC
- Microsoft Visual C++ (C90. Algunas características de C99) (MSVC no es compatible con C99[1])
- ARM RealView
Referencias
[editar]Enlaces externos
[editar]- ISO C working group
- Draft ANSI C Standard (ANSI X3J11/88-090) (May 13, 1988), Third Public Review
- Draft ANSI C Rationale (ANSI X3J11/88-151) (Nov 18, 1988)
- Schreiner, Axel-Tobias (Hanser). Object oriented programming with ANSI-C. Hanser. ISBN 3-446-17426-5.
- «ISO/IEC 9899:1999 Programming Languages -- C». American National Standards Institute. Archivado desde el original el 25 de julio de 2011. Consultado el 18 de junio de 2010.
- «ANSI Standards Action Vol. 36, #48». American National Standards Institute. 2 de diciembre de 2005. Archivado desde el original el 4 de marzo de 2016.
- Esta obra contiene una traducción derivada de «ANSI C» de Wikipedia en inglés, concretamente de esta versión, publicada por sus editores bajo la Licencia de documentación libre de GNU y la Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional.