- ¿Debo dejar de usar el término C / C ++?
Absolutamente. No está claro qué pretende expresar esta construcción, excepto, tal vez, la confusión acerca de qué son C y C ++ en nombre de la persona que usa el término.
Dado que esta confusión es una fuente de frustración tan común, muchas personas se han vuelto bastante emocionadas al respecto y la sola aparición de ese término será motivo suficiente para que se vuelvan negativas sobre su contribución. Esto puede parecer una tontería, pero parece ser lo que tenemos.
Recomiendo que en lugar de hablar de "C / C ++" utilice un término que realmente aclare lo que quiere decir.
Si usted está hablando de algo en C que podría o no podría también ser verdad para C ++, simplemente diga C .
Ejemplo: ¿Cómo debe main
declararse la función en C?
Al principio, puede parecer que la respuesta para C ++ es la misma: int main()
o int main(int, char**)
. Pero a medida que avanza la discusión, podría ser relevante señalar que en C ++, la función debe declararse a nivel global, lo que no tiene sentido en C, porque no tiene namespace
s. Por otro lado, C permite llamar main
recursivamente mientras que C ++ no. En C ++, hay una implícita return 0;
si se "cae", main
pero en C la return
declaración es obligatoria en cualquier ruta. La lista continúa y hace que la discusión sea mucho más simple si dejas en claro de antemano cuál es el idioma a discutir.
Si está hablando de algo en C ++ que podría o no ser cierto para C, simplemente diga C ++ .
Ejemplo: ¿Una malloc()
matriz ed de int
s inicialmente será todo ceros en C ++?
La respuesta corta para C resulta ser la misma: no. Pero a medida que avanza la respuesta, podría valer la pena señalar que en C, calloc
sería una buena alternativa, mientras que en C ++, usar un std::vector<int>
podría haber sido una mejor opción en primer lugar.
Si desea señalar una similitud entre C y C ++, diga C y C ++ .
Ejemplo: en C y C ++, se define sizeof
una int
implementación y puede variar entre compiladores y arquitecturas.
Aquí, queremos señalar que C y C ++ se comportan de la misma manera. Estamos hablando explícitamente de ambos idiomas.
De hecho, le recomiendo que sea aún más específico y no solo hable sobre "C" o "C ++" sino también sobre la versión precisa. Ambos idiomas están evolucionando y una declaración contundente como
C ++ admite /* … */
y // …
comenta mientras que C solo admite el /* … */
estilo.
No es ni correcto ni incorrecto.
- Si la respuesta a # 1 es sí, ¿cómo llamaría a un programa que usa una combinación de C y C ++?
Como los lenguajes se superponen, cada programa en C contendrá partes que podrían parecerse a C ++ y viceversa. Sin embargo, los autores probablemente habrán decidido utilizar un compilador C o C ++. Entonces, diga "el programa está escrito en C " si está compilado con un compilador de C y "el programa está escrito en C ++ " si usan un compilador de C ++, incluso si pueden negarse a usar las características modernas de C ++. Algunas personas se refieren a código C ++ como C-style C ++ . La ausencia de sobrecarga, excepciones, polimorfismo, plantillas y flujos de E / S son características comunes de dicho código.
Si, en cambio, algunos archivos se escriben en C y se compilan con un compilador de C y algunos otros archivos se escriben en C ++ y se compilan con un compilador de C ++, y luego los archivos de objetos se vinculan entre sí, diría que "el programa se escribe en un mezcla de C y C ++ "como, de hecho, ya lo hizo.
Sin embargo, si, en cambio, los autores se preocuparon por escribir todos y cada uno de los archivos de tal manera que puedan compilarse con un compilador de C o C ++ y el programa resultante haría lo mismo, podría decir que "el programa está escrito en un subconjunto común de C y C ++ ".
Este último suele ser el caso de los archivos de encabezado que deben compartirse entre el código C y C ++. Escribir dicho código no es fácil, por cierto. Si desea enfatizar aún más que solo se usaron tales construcciones que son válidas en C y C ++ y que son ampliamente compatibles con diferentes proveedores de compiladores, el término un subconjunto común portátil de C y C ++ puede usarse para enfatizar esto.
- Dado que ambos son lenguajes "diferentes", ¿es probable que en algún momento los compiladores de C ++ dejen de admitir código escrito en el lenguaje C (dado que el C ++ moderno está divergiendo de la mentalidad C para cosas básicas como punteros, manejo dinámico de memoria, etc.)?
No estoy seguro de entender esta pregunta. Como C y C ++ son lenguajes diferentes, no puede esperar que un compilador para uno acepte un programa escrito para el otro. Sin embargo, los compiladores a menudo se diseñan de forma modular y si un compilador tiene una interfaz C ++ , es muy probable que también tenga una interfaz C. (A continuación, seleccionaría cuál de ellos desea mediante un interruptor de línea de comando o un medio similar). Mientras ambos idiomas se usen ampliamente, parece muy poco probable que esto cambie. Su punto de vista sobre "C ++ moderno" creo que es básicamente una cuestión de buenos estándares de codificación y la biblioteca estándar. Desde el punto de vista del compilador , la evolución de ambos idiomas es más bien convergente que divergente.
- ¿Existe ahora alguna colaboración entre las personas que hacen los estándares de C / C ++ para mantener la compatibilidad?
Si. El modelo de memoria y la biblioteca de operaciones atómicas introducidas en C ++ 11 y C11 es un buen ejemplo. Parece que los diseñadores de ambos idiomas se dan cuenta de que la compatibilidad es importante y están trabajando para mejorarla. Personalmente, desearía que la colaboración fuera más intensa y los dos grupos de trabajo de ISO quizás incluso se unieran, pero mis deseos no son importantes.
Bjarne Stroustrup habla sobre las diferencias y los puntos en común entre las diversas versiones de C y C ++ en § 44.3 de la cuarta edición del lenguaje de programación C ++ que, irónicamente, se titula "Compatibilidad C / C ++". El uso del término podría ser apropiado en este caso, ya que está claro lo que significa.
- Si el número 4 es sí, dicha colaboración podría terminar en un futuro próximo con la aparición del moderno C ++ (14/11/17)
Como se discutió anteriormente, sucedió en C ++ 11 y se espera / espera / necesita que vuelva a suceder.