¿Dónde encuentro los documentos estándar actuales de C o C++?
Para muchas preguntas la respuesta parece encontrarse en "la norma". Sin embargo, ¿dónde encontramos eso? Preferiblemente en línea.
Buscar en Google a veces puede parecer inútil, especialmente para los estándares C, ya que están ahogados en la avalancha de discusiones en los foros de programación.
Para comenzar, dado que estos son los que estoy buscando en este momento, ¿dónde hay buenos recursos en línea para:
- C89
- C99
- C11
- C++98
- C++03
- C++11
- C++14
- C++17
Versiones PDF del estándar
A partir del 1 de septiembre de 2014 y marzo de 2022, las mejores ubicaciones por precio para los documentos oficiales de los estándares C y C++ en PDF parecen ser:
C++20 – ISO/IEC 14882:2020: 212 CAD (alrededor de $165 USD) de csagroup.org
C++17 – ISO/IEC 14882:2017: $90 NZD (alrededor de $65 USD) de Standards New Zealand
C++14 – ISO/IEC 14882:2014: $90 NZD (alrededor de $65 USD) de Standards New Zealand
C++11 – ISO/IEC 14882-2011: $60 en ansi.org o $60 en Techstreet
C++03 – INCITS/ISO/IEC 14882:2003: $30 de ansi.org
C++98 – ISO/IEC 14882:1998: $95 NZD (alrededor de $65 USD) de Standards New Zealand
C17/C18 – INCITS/ISO/IEC 9899:2018: $116 de INCITS/ANSI / N2176 / c17_updated_proposed_fdis.pdf borrador de noviembre de 2017 (enlace roto, ver Wayback Machine N2176 )
C11 – ISO/IEC 9899:2011: $60 desde ansi.org / WG14 versión borrador N1570
C99 – INCITS/ISO/IEC 9899-1999(R2005): $60 de ansi.org / WG14 versión borrador N1256
C90 – ISO/IEC 9899:1990: $90 NZD (alrededor de $65 USD) de Standards New Zealand
Versiones electrónicas del estándar que no son PDF
Advertencia: la mayoría de las copias de los borradores estándar se publican en formato PDF y es posible que se hayan introducido errores si el texto/HTML se transcribió o se generó automáticamente a partir del PDF.
- último estándar C: plataforma de navegación en línea ISO, visible pero no descargable: ( https://www.iso.org/obp/ui/#iso:std:iso-iec:9899 )
- C89 – Versión borrador en formato de texto ANSI: ( https://web.archive.org/web/20161223125339/http://flash-gordon.me.uk/ansi.c.txt )
- C89 – Versión borrador como documento HTML: ( http://port70.net/~nsz/c/c89/c89-draft.html )
- C90 TC1; ISO/IEC 9899 TCOR1, documento HTML de una sola página: ( http://www.open-std.org/jtc1/sc22/wg14/www/docs/tc1.htm )
- C90 TC2; ISO/IEC 9899 TCOR2, documento HTML de una sola página: ( http://www.open-std.org/jtc1/sc22/wg14/www/docs/tc2.htm )
- C99 – Versión borrador (N1256) como documento HTML: ( http://port70.net/~nsz/c/c99/n1256.html )
- C11 – Versión borrador (N1570) como documento HTML: ( http://port70.net/~nsz/c/c11/n1570.html )
- C++11: borrador de trabajo (N3337) como documento de texto sin formato: ( http://port70.net/~nsz/c/c%2B%2B/c%2B%2B11_n3337.txt )
(El sitio que aloja la versión en texto plano del borrador de trabajo de C++11 también tiene algunos borradores de C++14 en este formato. Pero ninguno de ellos es copia del borrador de trabajo final, N4140.)
Versiones impresas del estándar.
Las copias impresas de las normas están disponibles en los organismos nacionales de normalización y en la ISO , pero son muy caras.
Si desea una copia impresa del estándar C90 por mucho menos dinero que el anterior, puede encontrar una copia usada barata del libro de Herb Schildt The Annotated ANSI Standard en Amazon , que contiene el texto real del estándar (útil) y comentarios sobre la norma (menos útil: contiene varios errores peligrosos y engañosos).
Los estándares C99 y C++03 están disponibles en forma de libro en Wiley y el BSI (British Standards Institute):
- Estándar C ++ 03 en Amazon
- Estándar C99 en Amazon
Versiones preliminares del comité de normas (gratis)
Los borradores de trabajo para futuras normas suelen estar disponibles en los sitios web de los comités:
- Sitio web del comité C++
- Sitio web del comité C
Si desea obtener borradores de los estándares C/C++ actuales o anteriores, hay algunos disponibles de forma gratuita en Internet:
Para C:
ANSI X3.159-198 (C89): No puedo encontrar un PDF de C89, pero es casi igual que C90. Las únicas diferencias importantes están en el texto estándar y la numeración de las secciones, aunque existen algunas ligeras diferencias textuales.
ISO/IEC 9899:1990 (C90): (Casi lo mismo que ANSI X3.159-198 (C89) excepto por el texto inicial y la numeración de las secciones. Hay al menos una diferencia textual en la sección 6.5.7 (anteriormente 3.5.7) , donde "una lista" se convirtió en "una lista entre llaves" . Tenga en cuenta que la conversión entre las normas ANSI e ISO/IEC se ve dentro de este documento, el documento se refiere a su nombre como "ANSI/ISO: 9899/99", aunque esto no es el nombre correcto del estándar creado posteriormente, el nombre correcto es "ISO/IEC 9899:1990")
TC1 para C90: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n423.pdf
Lamentablemente , no hay un enlace PDF para TC2 en el sitio web del WG14 .
ISO/IEC 9899:1999 (C99 que incorpora los tres corrigenda técnicos): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf
Una versión anterior de C99 que incorpora solo TC1 y TC2: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
Borrador de trabajo para el C99 original (es decir, precorrigenda): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n843.htm (HTML) y http://www.dkuug. dk/JTC1/SC22/WG14/www/docs/n843.pdf (PDF). Tenga en cuenta que hubo dos borradores de trabajo posteriores: N869 y N878, pero parecen haber sido eliminados del sitio web del WG14, por lo que este es el último disponible.
Lista de cambios entre C89/C90 y C99: http://port70.net/~nsz/c/c89/c9x_changes.html
TC1 para C99 (sólo el TC, no el estándar que lo incorpora): http://www.open-std.org/jtc1/sc22/wg14/www/docs/9899tc1/n32071.PDF
TC2 para C99 (sólo el TC, no el estándar que lo incorpora): http://www.open-std.org/jtc1/sc22/wg14/www/docs/9899-1999_cor_2-2004.pdf
ISO/IEC 9899:2011 (C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
Para obtener información sobre las diferencias entre N1570 y la versión final publicada de C11, consulte Últimos cambios en C11 y https://groups.google.com/g/comp.std.c/c/v5hsWOu5vSw
ISO/IEC 9899:2011/Cor 1:2012 (único corrigendum técnico de C11): esto se puede ver en https://www.iso.org/obp/ui/#iso:std:iso-iec:9899:ed- 3:v1:cor:1:v1:en pero no se puede descargar. Es la corrección de errores propiamente dicha, no un borrador.
ISO/IEC 9899:2018 (C17/C18): https://web.archive.org/web/20181230041359if_/http://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis. pdf (N2176)
Trabajo en progreso del C23: último borrador de trabajo al 1 de abril de 2023 (N3096): https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3096.pdf
Para C++:
ISO/IEC 14882:1998 (C++98): http://www.lirmm.fr/~ducour/Doc-objets/ISO+IEC+14882-1998.pdf
ISO/IEC 14882:2003 (C++03): https://web.archive.org/web/20180922024431/https://cs.nyu.edu/courses/fall11/CSCI-GA.2110-003/documents /c++2003std.pdf
ISO/IEC 14882:2011 (C++11): http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf
ISO/IEC 14882:2014 (C++14): https://github.com/cplusplus/draft/blob/master/papers/n4140.pdf?raw=true
ISO/IEC 14882:2017 (C++17): http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf
ISO/IEC 14882:2020 (C++20): https://isocpp.org/files/papers/N4860.pdf
ISO/IEC 14882:2023 (C++23): https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4950.pdf
Tenga en cuenta que estos documentos no son los mismos que la norma, aunque las versiones justo antes de las reuniones que deciden sobre una norma suelen ser muy parecidas a lo que figura en la norma final. Las versiones FCD (Borrador del Comité Final) están protegidas con contraseña; debes estar en el comité de estándares para obtenerlos.
Aunque las versiones preliminares pueden ser muy cercanas a las versiones finales ratificadas de los estándares, algunos de los editores de esta publicación le recomendarían encarecidamente que obtenga una copia de los documentos reales, especialmente si planea citarlos como referencias. Por supuesto, los estudiantes hambrientos deberían seguir adelante y utilizar los giros si no tienen dinero en efectivo.
Parece que, si está dispuesto y es capaz de esperar unos meses después de la ratificación de una norma, la clave es buscar "INCITS/ISO/IEC" en lugar de "ISO/IEC" cuando busque una norma. Al hacerlo, uno de los editores de esta publicación pudo encontrar los estándares C11 y C++11 a precios razonables. Por ejemplo, si busca "INCITS/ISO/IEC 9899:2011" en lugar de "ISO/IEC 9899:2011" en webstore.ansi.org encontrará la versión PDF a un precio razonable.
El sitio https://wg21.link/ proporciona enlaces URL cortos al borrador de trabajo actual de C++ y al borrador de estándares, y a los documentos del comité:
- https://wg21.link/std11 - C++11
- https://wg21.link/std14 - C++14
- https://wg21.link/std17 - C++17
- https://wg21.link/std20 - C++20
- https://wg21.link/std : borrador de trabajo actual (a mayo de 2022 todavía apunta a la versión 2021)
El borrador actual del estándar se mantiene como fuente LaTeX en Github . Estas fuentes se pueden convertir a HTML usando cxxdraft-htmlgen . Los siguientes sitios mantienen páginas HTML así generadas:
- Tim Song - Borrador de trabajo actual - C++11 - C++14 - C++17 - C++20
- Eelis - Borrador de trabajo actual
Tim Song también mantiene versiones HTML y PDF generadas de Networking TS y Ranges TS.
Extensiones POSIX al estándar C
El estándar POSIX (IEEE 1003.1) requiere que un sistema operativo compatible incluya un compilador de C. Este compilador debe, a su vez, ser compatible con el estándar C y también debe admitir varias extensiones definidas en la sección "Interfaces del sistema" de POSIX (como el off_t
tipo de datos, el <aio.h>
encabezado, la clock_gettime()
función y la _POSIX_C_SOURCE
macro).
Entonces, si intentó buscar una función en particular, le informaron "Esta función es parte de POSIX, no del estándar C" y se preguntó por qué un estándar de sistema operativo exige características del compilador y extensiones de lenguaje... ¡ahora lo sabe!
POSIX.1-2001: la sección Interfaces del sistema se puede descargar como un documento separado desde https://mirror.math.princeton.edu/pub/oldlinux/download/c951.pdf . La sección 1.7 establece que la versión relevante del estándar C es C99.
La sección "Shell y utilidades" ( https://mirror.math.princeton.edu/pub/oldlinux/download/c952.pdf ) exige no sólo que debe existir un compilador compatible con C99, sino que debe ser invocable desde el línea de comando bajo el nombre "c99". Una forma de implementar esto es colocar un script de shell llamado "c99" en /usr/bin, que llama a gcc con la
-std=c99
opción agregada a la lista de parámetros de la línea de comandos y bloquea la especificación de cualquier estándar competidor.POSIX.1-2001 tenía dos corrigendos técnicos, uno con fecha de 2002 y otro con fecha de 2004. No creo que estén incorporados en los documentos vinculados anteriormente. Hay una versión HTML en línea que incorpora la corrección en https://pubs.opengroup.org/onlinepubs/009695399/ , pero debo agregar que tuve algunos problemas con el cuadro de búsqueda, por lo que usar Google para buscar en el sitio probablemente sea tu mejor opción. mejor apuesta.
Hay un enlace de pago para descargar la primera corrección en https://standards.ieee.org/standard/1003_1-2001-Cor1-2002.html .
También hay un enlace de pago para el segundo en https://standards.ieee.org/standard/1003_1-2001-Cor2-2004.html
Hay una versión borrador de POSIX.1-2008 en http://www.open-std.org/jtc1/sc22/open/n4217.pdf .
POSIX.1-2008 también tenía dos corrigendos técnicos, el último de los dos con fecha de 2016. Hay una versión HTML en línea del estándar que incorpora los corrigendos en https://pubs.opengroup.org/onlinepubs/9699919799.2016edition/ , aunque , nuevamente, he tenido situaciones en las que el propio cuadro de búsqueda del sitio no era bueno para encontrar información.
Hay una versión HTML en línea de POSIX.1-2017 en https://pubs.opengroup.org/onlinepubs/9699919799/ ; aunque, nuevamente, recomiendo usar Google en lugar del cuadro de búsqueda de ese sitio. Según el sitio web de Open Group, "IEEE 1003.1-2017... es una revisión del estándar 1003.1-2008 para resumir el estándar, incluidos sus dos corrigendos técnicos (tal cual)". Las páginas de manual de Linux lo describen como "técnicamente idéntico" a POSIX.1-2008 con los corrigendos técnicos 1 y 2 aplicados. Por lo tanto, esta no es una revisión importante y no cambia el valor de la
_POSIX_C_SOURCE
macro.
Se pueden encontrar versiones en línea del estándar:
Borrador de trabajo, estándar para el lenguaje de programación C++
A continuación se muestran todos los borradores de la norma :
Todo lo siguiente se puede descargar gratuitamente
2023-08-14: N4958
Este es el estándar C++23:
2023-05-10: N4950
Como fuente de lo anterior, consulte N4951 , que dice:
"N4950 es el borrador de trabajo actual y final para C++23. Reemplaza a N4944 y forma la base del Borrador de Estándar Internacional para C++23... . El próximo borrador de trabajo será para C++26."
Las siguientes versiones preliminares de la norma :
Todas las siguientes se pueden descargar gratuitamente
2023-03-22: N4944
2022-12-18: N4928
2022-09-05: N4917
2022-03-17: N4910
2021-10-22: N4901
2021-06-18: N4892
2021-03-17
: N4885 2020-12-15: N4878
2020-10-18: N4868
2020-04-08: N4861
Este es el estándar C++20:
2020-04-08: N4860
Nota sobre N4860 y N4861:
Según N4859 :
"El contenido de N4860 y N4861 es idéntico excepto por la portada, los encabezados y pies de página, y excepto que N4861 no contiene un índice de referencias cruzadas de ISO C++ 2017".
Las siguientes versiones preliminares del estándar :
Todas las siguientes se pueden descargar gratuitamente
(muchas de ellas se pueden encontrar en este enlace principal de GitHub )
2020-01-14: N4849
2019-11-27: N4842
2019-10-08: N4835 git
2019-08-15: N4830 git
2019-06-17: N4820 git
2019-03-15: N4810 git
2019-01-21: N4800 git
2018-11-26: N4791 git
2018-10-08: N4778 git
2018- 07-07: N4762 git
2018-05-07: N4750 git
2018-04-02: N4741 git
2018-02-12: N4727 git
2017-11-27: N4713 git
2017-10-16: N4700 git
2017-07- 30: N4687 git
Este es el antiguo estándar C++17:
esta versión requiere autenticación:
2017-03-21: N4660
Esta versión no requiere autenticación:
2017-03-21: N4659 git
N4661 establece explícitamente que: "El contenido de N4659 y N4660 es idéntico excepto por la portada y los encabezados de página".
Las siguientes versiones preliminares del estándar :
Todas las siguientes se pueden descargar gratuitamente
2017-02-06: N4640 git
2016-11-28: N4618 git
2016-07-12: N4606 git
2016-05-30: N4594 git
2016-03-19: N4582 git
2015-11-09: N4567 git
2015- 22-05: N4527 git
2015-04-10: N4431 git
2014-11-19: N4296 git
Este es el antiguo estándar C++14 :
esta versión requiere autenticación
2014-10-07: N4140 git Esencialmente C++14 con errores menores y errores tipográficos corregidos
2014-09-02: N4141 git Standard C++14
2014-03- 02: N3937
2014-03-02: N3936 git
Las siguientes versiones borrador del estándar :
Todas las siguientes se pueden descargar gratuitamente
2013-10-13: N3797 git
2013-05-16: N3691
2013-05-15: N3690
2012-11-02: N3485
2012-02-28: N3376
2012-01-16: N3337 git Essentially C++11 con errores menores y errores tipográficos corregidos
Este es el antiguo estándar C++11 :
esta versión requiere autenticación
2011-04-05: N3291
Las siguientes versiones preliminares del estándar :
Todas las siguientes se pueden descargar gratuitamente
2011-02-28: N3242 (diferencias con respecto a N3291 muy pequeñas)
2010-11-27: N3225
2010-08-21: N3126
2010-03-29: N3090
2010-02-16: N3035
2009-11-09: N3000
2009-09-25: N2960
2009-06-22: N2914
2009-03-23: N2857
2008-10-04: N2798
2008-08-25: N2723
2008 -06-27: N2691
2008-05-19: N2606
2008-03-17: N2588
2008-02-04: N2521
2007-10-22: N2461
2007-08-06: N2369
2007-06-25: N2315
2007- 07-05: N2284
03-11-2006: N2134
21-04-2006: N2009
19-10-2005: N1905
27-04-2005: N1804
Este es el antiguo estándar C++03:
todas las versiones siguientes requieren autenticación
2004-11-05: N1733
2004-07-16: N1655 No oficial
2004-02-07: N1577 C++03 (o muy cercano)
2001-09 -13: N1316 Borrador de corrección técnica ampliada
1997-00-00: N1117 Borrador de corrección técnica ampliada
Las siguientes versiones preliminares del estándar :
Todas las siguientes se pueden descargar gratuitamente
1996-00-00: N0836 Borrador de corrección técnica ampliada
1995-00-00: N0785 Documento de trabajo para el borrador del estándar internacional propuesto para sistemas de información - Lenguaje de programación C++
Otros artículos interesantes:
2023 / 2022 / 2021 / 2020 / 2019 / 2018 / 2017 / 2016 / 2015 / 2014 / 2013 / 2012 / 2011
C99 está disponible en línea . Citado de www.open-std.org :
La última versión disponible públicamente de la norma es la combinada C99 + TC1 + TC2 + TC3, WG14 N1256 , con fecha del 7 de septiembre de 2007. Este es un documento de trabajo del WG14, pero refleja el estándar consolidado en el momento de su publicación.
Enlaces borrador:
C++11 (+correcciones editoriales): N3337 HTML , PDF
C++14 (+correcciones editoriales): N4140 HTML , PDF
C11 N1570 ( texto )
C99N1256 _
Los borradores de la Norma se distribuyen para comentarios antes de su ratificación y publicación.
Tenga en cuenta que un borrador de trabajo no es la norma actualmente vigente y no es exactamente la norma publicada.
Puede que le resulte útil el borrador del estándar internacional para C++0x.
Los estándares ISO cuestan dinero, desde una cantidad moderada (para una versión en PDF) hasta un poco más (para una versión en libro).
Si bien no están finalizados, generalmente se pueden encontrar en línea, como borradores. La mayoría de las veces, la versión final no difiere significativamente del último borrador, por lo que, aunque no son perfectas, encajarán bien.
- Borrador C++ 0x