Relación entre C y C ++

Cuando Stroustroup diseñaba C ++, uno de sus objectives era que C ++ fuera un superconjunto de C tanto como fuera posible. Entiendo que este no es el caso al 100%, pero la mayoría de los buenos códigos en C también son códigos C ++.

Pero estoy escuchando que C99 admite muchas cosas que C ++ no (como VLA) y que incluso habrá C1x o C0x como se llame. Entonces, C ++ es un superconjunto del viejo C89 y, a partir de ese momento, C y C ++ se están desarrollando de forma bastante independiente.

C ++ es un superconjunto cercano de C89 / C90. (No recomiendo escribir el código con el propósito de poder comstackrlo como C o C ++, sin embargo). Desde entonces, C99 divergió. El nuevo estándar de C ++ (a menudo llamado C ++ 0x) intentará ser más compatible, pero no tendrá elementos como los arreglos de longitud variable de C99. Stroustrup ha expresado su decepción con algunas de las acciones del comité C, aparentemente esperando que intenten mantenerse más cerca de la compatibilidad con C ++.

Entonces, sí, los idiomas son divergentes.

Eso es correcto. C ++ comenzó como un superconjunto de C cuando se desarrolló originalmente. Desde entonces, los dos se han vuelto independientes del otro.

Hay un esfuerzo concertado para mantener los idiomas tan compatibles como sea posible, y C ++ 0x adoptará algunos de los cambios de C99. Pero parece probable que divergan en cierta medida, siendo los VLA la discrepancia más notable. No sé que C ++ adoptará restrict tampoco.

Un interesante artículo de Bjarne Stroustrup que arroja algo de luz sobre el tema: Rivalidad entre hermanos: C y C ++ (pdf)

Incluso para el antiguo C, también conocido como C89, bajo la cubierta la diferencia es difícil de manejar, los retornos de los operadores que son lvalue para uno y no el otro, el flujo de control que es válido para uno y no el otro, etc. Un nivel de interfaz para funciones con prototipos, struct , etc.

Para una versión más nueva de los idiomas, esto diverge aún más, ya que incluso la compatibilidad de la interfaz puede ser difícil de mantener. C99 ya tiene la palabra clave static para los límites de los parámetros de la función de matriz, los conceptos de las constantes de tiempo de comstackción son bastante diferentes en ambos idiomas, C ++ comienza a reutilizar las palabras clave antiguas ( auto ) y utiliza excesivamente palabras clave nuevas que no están en un espacio de nombres reservado …

Entonces, sí, creo que la brecha crecerá, y probablemente sería mejor para ambas comunidades admitir el divorcio y tratar de llevarse bien por separado.

pero la mayor parte del código bueno en C es también el código C ++.

No.

Yo diría que la mayoría de los buenos códigos de C son comstackbles usando un comstackdor de C ++.
Eso no lo hace código C ++.

C ++ es un superconjunto del viejo C89 y, a partir de entonces, C y C ++ se están desarrollando de forma bastante independiente.

C ++ se basó de C89.
C se extendió con C99, muy poco de lo cual se incorporó en C ++ 03
Hay esfuerzos continuos para minimizar la diferencia y acercar los idiomas (cuando sea razonable) para C ++ 0x