¿Qué características de C están influenciadas por / derivadas de las características de C ++? [cerrado]

8

¿Cuáles son las características del estándar C real, que originalmente no formaban parte de C, pero se inventaron en / para C ++ y, debido a sus beneficios, se adoptaron posteriormente en C?

Un ejemplo destacado es el comentario de una sola línea //, que originalmente vino de C ++ y luego fue adoptado por C.

¿Conoces más características del estándar C real, que explícita o implícitamente provino del desarrollo de C ++?

Información: Por supuesto, sé que C ++ se deriva de C, pero solo estaba pensando qué características se adoptaron a partir del desarrollo de su derivada, C ++.

RobertS apoya a Monica Cellio
fuente
44
El _Booltipo de C fue inspirado por C ++, boolcreo.
Jesper Juhl
2
Ser capaz de declarar variables en otras ubicaciones que no sean en la parte superior de una función también fue un C ++ primero, luego adoptado por CI think.
Jesper Juhl
2
Creo que los prototipos de funciones provienen de C ++, IIRC.
Ian Abbott
2
No permitir "int implícito" como un tipo de retorno de función (excepto para main()) es (creo) también algo que C ++ fue pionero y C adoptó posteriormente.
Jesper Juhl
55
Esto no parece una pregunta con una respuesta clara, y no hay ningún problema obvio aquí.
Caleb

Respuestas:

4

No puedo confirmar que definitivamente hayan sido influenciados por C ++ directamente 1 , pero aquí hay una lista de características en C ++ estándar que se agregaron en C99:

  • comentarios de una sola línea (como se mencionó)
  • funciones en línea
  • variables permitidas después del comienzo del bloque
  • tipo de datos booleano
  • biblioteca matemática compleja

C11:

  • Uniones anónimas (C11 también permite estructuras anónimas). Las uniones anónimas ya estaban en C ++ estándar. (Las estructuras anónimas todavía no están permitidas en C ++ estándar).

1 Por ejemplo, BCPL, el predecesor de B, que a su vez es el predecesor de C, ya tenía la misma sintaxis para comentarios de una sola línea. Algunos de estos pueden haber sido admitidos como extensiones de lenguaje en alguna implementación de C antes de su incorporación al estándar C ++. En estos casos, tanto el estándar C como el C ++ estándar pueden haber sido influenciados por la misma fuente, en lugar de influirse entre sí.

eerorika
fuente
1
@KonradRudolph Anónimo: union named { struct { int i;}; };Sin nombre: union named { struct { int i;} unnamed; };. La estructura sin nombre no tiene nombre, pero tiene una variable con nombre. La estructura anónima no tiene nombre y no tiene una variable con nombre.
eerorika
1
@Konrad stackoverflow.com/a/14248127/560648
Carreras de ligereza en órbita el
1
Las funciones en línea existían en GCC y otros compiladores antes de C ++.
Lee Daniel Crocker
2

Los atributos se agregaron en C ++ 11 y se agregarán en la próxima revisión estándar de C C2x . La propuesta (y aquí ) para esta característica hace referencia específica a C ++.

Los atributos pueden ser útiles para proporcionar información que, por ejemplo, ayuda al compilador a emitir mejores diagnósticos u optimizar el código generado. Fuente

Ejemplo:

int [[attr1]] i [[attr2, attr3]];

[[attr4(arg1, arg2)]] if (cond)

{
    [[vendor::attr5]] return i;
}

En este ejemplo, " attr1 atributo se aplica al tipo de variable i, attr2 y attR3 aplica a la propia variable, attr4 se aplica a la sentencia if y el vendedor :: attr5 se aplica a la instrucción return. " Fuente

Adán
fuente
Interesante, sin embargo, "se agregará" no está garantizado.
chux - Restablece a Mónica el