¿Cuál es la relación entre los estándares C y C++?
dependencies standards (3)
¿Cómo sabría de qué versión del estándar C depende el estándar C ++?
En C ++ 14, es ISO / IEC 9899: 1999 (más tres correcciones, por lo que C99 en esencia) como se indica en 1.2 [intro.refs] en N4140. En C ++ 98, era C90, en C ++ 17, probablemente sea C11, pero el estándar de C ++ siempre lo hará explícito.
Si miro el estándar C con referencia a C ++, ¿cómo podría saber si el área que estoy buscando ha sido anulada?
Si observa el estándar C ++, importa explícitamente las definiciones C menos restrict
o cualquier comportamiento C que desee o realiza modificaciones explícitas.
Por lo general, leer buena documentación en lugar de la norma en sí le servirá muy bien.
Para abordar su pregunta inicial:
El autor cita del estándar C99 en la documentación de C ++. Es eso valido?
Sí porque
1 Las tablas 74 [contiene
std::tolower
, me], 75, 76, 77, 78 y 79 describen los encabezados<cctype>
,<cwctype>
,<cstring>
,<cwchar>
,<cstdlib>
(conversiones de caracteres) y<cuchar>
, respectivamente.
2 El contenido de estos encabezados debe ser el mismo que el de los encabezados de la Biblioteca C estándar<ctype.h>
,<wctype.h>
,<string.h>
,<wchar.h>
, y<stdlib.h>
y el C Unicode TR header<uchar.h>
, respectivamente, con las siguientes modificaciones [ninguna de ellas se aplica astd::tolower
, me]:
21.8 [c.strings] en N4140
Estaba escribiendo esta respuesta y cité de http://en.cppreference.com/w/cpp/string/byte/tolower#Parameters
No es representable como char sin signo y no es igual a EOF, el comportamiento no está definido
Cuando fui a inspeccionar la edición que había agregado esta frase , encontré el comentario del autor:
No se pueden usar caracteres negativos firmados con ninguna función ctype.h por C99 7.4 / 1
El autor cita del estándar C99 en la documentación de C ++. Es eso valido? No pude encontrar nada sobre la definición de esta función en el estándar de C ++, así que debo suponer que es válida.
Pero esto me preocupa por 2 razones:
- ¿Cómo sabría de qué versión del estándar C depende el estándar C ++?
- Hay listas de las discrepancias entre C y C ++ en todas partes . Si miro el estándar C con referencia a C ++, ¿cómo podría saber si el área que estoy buscando ha sido anulada?
La edición es correcta y este texto en particular ha estado en el estándar desde C90.
De C90 4.3
El encabezado declara varias funciones útiles para probar y mapear caracteres. En todos los casos, el argumento es un int, cuyo valor debe ser representable como un carácter sin signo o debe ser igual al valor de la macro EOF. Si el argumento tiene otro valor, el comportamiento no está definido.
De C11 7.4 / 1
El encabezado declara varias funciones útiles para clasificar y mapear caracteres. En todos los casos, el argumento es un int, cuyo valor debe ser representable como un carácter sin signo o debe ser igual al valor de la macro EOF. Si el argumento tiene otro valor, el comportamiento no está definido.
Texto idéntico; C siempre ha sido así. Por lo tanto, no importa qué versión C use su versión C ++ particular, porque todas las versiones C son equivalentes.
Para la primera pregunta:
El estándar de C ++ enumera explícitamente el (los) estándar (s) C de los que depende en su sección de referencias normativas . Para C ++ 14, [intro.refs] 1.2 / 1 pasa a enumerar C 99:
- ISO / CEI 9899: 1999, Lenguajes de programación - C
- ISO / CEI 9899: 1999 / Cor.1: 2001 (E), Lenguajes de programación - C, Corrigéndum técnico 1
- ISO / CEI 9899: 1999 / Cor.2: 2004 (E), Lenguajes de programación - C, Corrigéndum técnico 2
- ISO / CEI 9899: 1999 / Cor.3: 2007 (E), Lenguajes de programación - C, Corrigéndum técnico 3
Para la segunda pregunta:
El estándar C ++ no incorpora implícitamente ninguna parte del estándar C; todas las referencias al estándar C son explícitas. Una buena fuente de información sobre dónde C ++ se desvía de C es el Anexo C, "Compatibilidad" del estándar C ++, particularmente C.1 [diff.iso].
Además, las referencias a la biblioteca estándar de C están dispersas en toda la descripción de la biblioteca estándar de C ++ (capítulos 17-30 en C ++ 14). De particular interés puede ser:
- 17.2 [library.c], que describe la inclusión básica de la biblioteca estándar C
- Capítulo 18 [language.support], que describe muchos de los encabezados
<c:::>
de la biblioteca estándar de C ++ (los que ofrecen la funcionalidad de biblioteca estándar de C).