¿Dónde encuentro los documentos estándar actuales de C o C ++?

394

Para muchas preguntas, la respuesta parece encontrarse en "el estándar". Sin embargo, ¿dónde encontramos eso? Preferiblemente en línea.

Googlear a veces puede parecer inútil, de nuevo especialmente para los estándares C, ya que se ahogan en la avalancha de discusiones en foros de programación.

Para comenzar esto, ya 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
Christoffer
fuente
44
Tenga en cuenta la discusión sobre MSO . Las respuestas a esta pregunta son valiosas para los programadores de C y C ++; debe dejarse abierto (sobre todo porque hay un estándar C ++ 2014 para agregar a las respuestas, una vez que se ha publicado, ya está aprobado).
Jonathan Leffler

Respuestas:

439

Versiones PDF del estándar

A partir del 1 de septiembre de 2014, las mejores ubicaciones por precio para los documentos estándar C y C ++ en PDF son:

Por lo general, no puede obtener revisiones antiguas de un estándar (cualquier estándar) directamente de los organismos de estándares poco después de que se publique una nueva edición del estándar. Por lo tanto, los estándares para C89, C90, C99, C ++ 98, C ++ 03 serán difíciles de encontrar en un organismo de estándares. Si necesita una revisión anterior de un estándar, marque Techstreet como una posible fuente. Por ejemplo, todavía puede proporcionar la versión canadiense CAN / CSA-ISO / IEC 9899: 1990 estándar en PDF, por una tarifa.

Versiones electrónicas no estándar del estándar

Versiones impresas del estándar

Las copias impresas de las normas están disponibles en los organismos nacionales de normalización e ISO, pero son muy caras.

Si desea una copia impresa de la norma C90 para la cantidad de dinero inferior al anterior, puede ser capaz de encontrar una copia usado barato de hierba Schildt libro 's La comentada norma ANSI en Amazon , que contiene el texto de la norma (útil) y comentarios sobre el estándar (menos útil, contiene varios errores peligrosos y engañosos).

Los estándares C99 y C ++ 03 están disponibles en forma de libro de Wiley y el BSI (British Standards Institute):

Versiones preliminares del comité de estándares (gratis)

Los borradores de trabajo para estándares futuros a menudo están disponibles en los sitios web del comité:

Si desea obtener borradores de los estándares actuales o anteriores de C / C ++, hay algunos disponibles de forma gratuita en Internet:

Para C:

Para C ++:

Tenga en cuenta que estos documentos no son los mismos que el estándar, aunque las versiones justo antes de las reuniones que deciden sobre un estándar suelen estar muy cerca de lo que está en el estándar final. Las versiones FCD (Borrador del Comité Final) están protegidas con contraseña; necesitas estar en el comité de estándares para obtenerlos.

A pesar de que las versiones preliminares pueden estar muy cerca de las versiones finales ratificadas de los estándares, algunos de los editores de esta publicación le aconsejarán encarecidamente que obtenga una copia de los documentos reales, especialmente si planea citarlos como referencias. Por supuesto, los estudiantes hambrientos deben seguir adelante y usar los borradores si tienen poco dinero.


Parece que, si está dispuesto y puede esperar unos meses después de la ratificación de un estándar, buscar "INCITS / ISO / IEC" en lugar de "ISO / IEC" al buscar un estándar es la clave. 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 documentos del comité:


El borrador actual del estándar se mantiene como fuentes LaTeX en Github . Estas fuentes se pueden convertir a HTML usando cxxdraft-htmlgen . Los siguientes sitios mantienen páginas HTML así generadas:

Tim Song también mantiene versiones HTML y PDF generadas de Networking TS y Ranges TS.

Michael Burr
fuente
6060
El problema con el libro de Schildt es que sus comentarios devaluan severamente el estándar sobre el que comenta.
sbi
57
Muy mala recomendación de libros (de Herb Schildt), vea esto: lysator.liu.se/c/schildt.html
Wiz
11
Soy consciente de la revisión: menciono el libro solo como una forma posible de obtener el estándar de manera muy económica. Pero supongo que las personas también deberían saber sobre la revisión. Sugeriría que simplemente ignore la parte de anotación del libro si desea una copia impresa estándar de bajo costo (eso es lo que hago).
Michael Burr
37
El libro de Schildt (que creo que está agotado) era mucho más barato que una copia impresa del estándar real. Se ha sugerido que la diferencia de precio refleja el valor de las anotaciones. Cada copia del libro debe ir acompañada de una copia impresa del Estándar C Anotado de Clive DW Feather . (Tenga en cuenta que algunos materiales de introducción no se encuentra en el libro de Schildt.)
Keith Thompson
12
@MichaelBurr, todo el estándar se puede encontrar gratis en www.open-std.org ya que tiene la respuesta aceptada, ¿qué hay de cambiar los enlaces a los gratuitos?
Shahbaz
429

Se pueden encontrar versiones en línea del estándar:

Borrador de trabajo, estándar para lenguaje de programación C ++

Las siguientes versiones preliminares de la norma :
Todas las siguientes son de descarga gratuita
(muchas de estas se pueden encontrar en este enlace principal de GitHub )
2020-01-14: N4849 git
2019-11-27: N4842 git
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 parece ser el nuevo estándar:
esta versión requiere autenticación
2017-03-21: N4660 es el borrador estándar de C ++ 17

Las siguientes versiones preliminares del estándar :
Todas las siguientes son de descarga gratuita
2017-03-21: N4659 git
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-05-22: N4527 git
2015-04-10: N4431 git
2014-11-19: N4296 git

Este parece ser 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 preliminares de la norma :
Todas las siguientes son de descarga gratuita
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 Esencialmente C ++ 11 con errores menores y errores tipográficos corregidos

Este parece ser el antiguo estándar de C ++ 11 :
esta versión requiere autenticación
2011-04-05: N3291 C ++ 11 (o muy cerca)

Las siguientes versiones preliminares de la norma :
Todas las siguientes son de descarga gratuita
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-05-07: N2284
2006-11-03: N2134
2006-04-21: N2009
2005-10-19: N1905
2005 -04-27: N1804

Este parece ser 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 cerca)
2001 -09-13: Borrador de corrección técnica ampliada
N1316 1997-00-00: Borrador de corrección técnica ampliado N1117

Las siguientes versiones preliminares de la norma :
Todas las siguientes son de descarga gratuita
1996-00-00: N0836 Borrador del Corrigendum técnico ampliado
1995-00-00: N0785 Documento de trabajo para el Anteproyecto de Norma Internacional para Sistemas de Información - Lenguaje de programación C ++

Otros documentos interesantes:

2020 / 2019 / 2018 / 2017 / el año 2016 / el año 2015 / 2014 / 2013 / 2012 / 2011

Martin York
fuente
1
¡Quizás quieras mencionar a qué estándar te llevan los enlaces! También se agrega el estándar C11: open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
Shahbaz
@Shahbaz: No estoy familiarizado con todas las copias del estándar C (ya que no escribo código C (solo C ++)). Es posible que desee comenzar su propia respuesta o editar una de las respuestas a continuación que se ocupa explícitamente del lenguaje C (consulte la siguiente).
Martin York
17
+1 para mantener una lista que está constantemente más actualizada que incluso el grupo de trabajo 21 de ISO .
Lundin
55
+1 para la lista; solo para agregar que todos los borradores están disponibles como repositorio git github.com/cplusplus/draft . Posiblemente podría agregar el enlace a isocpp.org/std/the-standard
pepr
@ShafikYaghmour: Parece que lo han bloqueado (lo que generalmente significa que es un lanzamiento oficial). He actualizado con enlaces a la versión que requiere autenticación (es decir, pagaste por ella).
Martin York
64

C99 está disponible en línea . Citado de www.open-std.org :

La última versión del estándar disponible públicamente es la combinación C99 + TC1 + TC2 + TC3, WG14 N1256 , con fecha 2007-09-07. Este es un documento de trabajo WG14, pero refleja el estándar consolidado en el momento de la emisión.

Frederico
fuente
26

Enlaces de borrador:

C ++ 11 (+ correcciones editoriales): N3337 HTML , PDF

C ++ 14 (+ correcciones editoriales): N4140 HTML , PDF

C11 N1570 ( texto )

C99 N1256

Los borradores de la Norma se distribuyen para comentarios antes de la ratificación y publicación.

Tenga en cuenta que un borrador de trabajo no es el estándar actualmente en vigor, y no es exactamente el estándar publicado

usuario1055604
fuente
El enlace "N1169" va a un documento de cuatro páginas que contiene algunos informes de defectos. No es, en ningún sentido, un borrador del estándar C ++ (o cualquier otro).
Gareth McCaughan
Me gusta esta respuesta porque deja en claro cuál es el borrador más reciente para cada lanzamiento principal.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
12

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 de libro).

Sin embargo, aunque 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 si bien no es perfecta, se adaptarán perfectamente.

Pieter
fuente
7

Los estándares C99 y C ++ 03 están disponibles en forma de libro de Wiley:

Además, como ya se mencionó, el borrador de trabajo para estándares futuros a menudo está disponible en los sitios web del comité:

El borrador C-201x está disponible como N1336 y el borrador C ++ 0x como N3225 .

Anthony Williams
fuente
1
Solo una nota sobre la versión impresa para el Estándar C de Wiley: es el estándar C99, no el C89 / 90.
Michael Burr
4

Los estándares ISO C y C ++ son muy caros. Por otro lado, los INCITS los republican por mucho menos. http://www.techstreet.com/ parece tener el PDF por $ 30 (busque INCITS / ISO / IEC 14882: 2003).

Las versiones impresas también están disponibles. Busque las versiones del British Standards Institute, publicadas por Wiley.

MSalters
fuente
Actualmente, techstreet.com tiene el estándar C ++ 2003 en formato PDF por US $ 30 y el estándar C ++ 2011 por US $ 403.
Keith Thompson, el
Muchas gracias por el enlace a Techstreet. La tienda web de ANSI.org no me vendía el estándar C11 (rechazar la tarjeta de crédito por razones de "seguridad", es decir, no es una buena razón), mientras que la compra de precio equivalente (con la misma tarjeta) en Techstreet se realizó sin problemas y sin un enganche.
Arto Bendiken
4

Los documentos de normas reales pueden no ser los más útiles. La mayoría de los compiladores no implementan completamente los estándares y en ocasiones pueden entrar en conflicto. Entonces la documentación del compilador que ya tendría será más útil. Además, la documentación contendrá comentarios y notas específicos de la plataforma sobre cualquier advertencia.

Kris Kumler
fuente
24
La documentación del compilador es importante, pero conocer el idioma en lugar de conocer su implementación es mucho más.
Spidey
2
Con el estándar real, puede encontrar errores en los compiladores y ayudarlos a seguir mejor el estándar parchándolos, enviando informes de errores o simplemente entrando en una sala de IRC y hablando con alguien que pueda solucionarlo.
hdante
3
@hdante, absolutamente. Cuando tiene el estándar en sí como el ideal, puede exigir compatibilidad del proveedor. @ / all: la intención aquí no era decir que el estándar no es útil (para su información, pasar del estándar primero es el enfoque que he tomado en el pasado), sino que también debe conocer su punto de partida del mundo real, que con suerte está en línea con los estándares.
Kris Kumler
66
De todos modos, la documentación del compilador tiende a omitir las cosas cubiertas en los estándares.
SamB
4

El texto de un borrador del estándar ANSI C (también conocido como C.89) está disponible en línea. Esto fue estandarizado por el comité ANSI antes de la aceptación del estándar ISO C (C.90), por lo que la numeración de las secciones difiere (las secciones ANSI 2 a 4 corresponden aproximadamente a las secciones ISO 5 a 7), aunque el contenido es (se supone ser) en gran medida idéntico.

revs jxh
fuente
¿Es realmente el último borrador? Una diferencia que conozco es que este borrador especifica el rango de tm_sec para ser [0, 60], mientras que C90 (incorrectamente)[0, 61]
Cubbi
@Cubbi, como personalmente no puedo demostrar que es así, modifiqué la redacción. Gracias.
jxh
@Cubbi: dijo que era el último borrador del estándar ANSI . Parece que alguien en el ISO WG se confundió y pensó que los dos segundos de salto posibles en un año también podrían ocurrir en / después del mismo minuto ... O recibieron el error de POSIX, que no dice dónde lo obtuvieron desde, solo que lo arreglaron para alinearse con C99.
SamB
K&R 2nd Ed. (ANSI C), que está no basado en el estándar final real, especifica que tm_seces (0, 61). Pensé que era por segundos bisiestos, tiene sentido.
veganaiZe
@veganaiZe El rango es [0, 60] para permitir segundos intercalares (de lo contrario sería [0, 59]). [0, 61] fue un error, lo que implica que sería posible tener dos segundos intercalares en el mismo minuto (no lo es).
Keith Thompson
2

Aunque no es un estándar real, hay una enmienda a ISO C (C89 / 90) llamada C94 / 95, o Anexo Normativo 1. Se integró en C99, aunque algunos compiladores como Clang le permiten especificar -std=c94en la línea de comandos. ISO / IEC 9899: 1990 / Amd 1: 1995 se puede comprar por un alto precio en SAI GLOBAL (PDF o copia impresa).

Un resumen del documento se puede encontrar aquí .

Cuando se consideró el (entonces borrador) Estándar ANSI C para la adopción de un Estándar Internacional en 1990, hubo varias objeciones porque no abordaba cuestiones de internacionalización. Debido a que la Norma ya llevaba varios años en desarrollo, se acordó que se realizarían algunos cambios para proporcionar la base (por ejemplo, se agregaron las funciones de la subcláusula 7.10.7), y se trabajaría por separado para proporcionar internacionalización adecuada de la Norma. Este trabajo ha culminado en el Anexo Normativo 1.

El Anexo 1 normativo encarna la reacción de C a las limitaciones y promesas de los juegos de caracteres internacionales. Los dígrafos y el encabezado estaban destinados a mejorar la apariencia de los programas en C escritos en variantes nacionales de ISO 646 sin, por ejemplo, {o} caracteres. En el otro extremo del espectro, las instalaciones conectan y amplían la base apenas adecuada del antiguo estándar en un conjunto completo y consistente de utilidades para manejar caracteres anchos y cadenas multibyte.

Este documento resume el Anexo Normativo 1. Tiene la intención de informar rápidamente a los lectores que ya están familiarizados con el Estándar; no presenta, y no puede, introducir el tema complejo detrás de NA1, ni puede reemplazar el documento original como manual de referencia. (Sin embargo, trata de ser lo más preciso posible, y su autor desea escuchar sobre cualquier error u omisión).

usuario3920237
fuente
-6

http://c0x.coding-guidelines.com/ contiene una versión del estándar C basada en HTML que se puede buscar. En realidad, una versión ligeramente modificada:

Este sitio web contiene una versión modificada de N1256. Incluye texto que se ha eliminado de C99 (es decir, en forma tachada) y texto que solía aparecer en C99 (es decir, en forma subrayada).

Denilson Sá Maia
fuente
2
El sitio web es inútil ya que la mayoría de las páginas están en blanco.
Nisse Engström
Este sitio web es realmente una mierda.
MD XF