sirve que programacion programa para lenguaje ejemplos caracteristicas c++ c

programacion - para que sirve c++



¿Por qué alguien usaría C sobre C++? (25)

No he podido encontrar mucha evidencia de por qué querría elegir C sobre C ++.

Apenas puedes llamar lo que estoy a punto de decir evidencia; es solo mi opinión.

A la gente le gusta C porque encaja muy bien en la mente del programador.

Existen muchas reglas complejas de C ++ [cuando se necesitan destructores virtuales, cuándo se pueden llamar métodos virtuales en un constructor, cómo interactúan la sobrecarga y la superposición, ...], y dominarlos todos requiere un gran esfuerzo. Además, entre las referencias, la sobrecarga del operador y la sobrecarga de funciones, entender un fragmento de código puede requerir que entiendas otro código que puede ser o no fácil de encontrar.

Una pregunta diferente sobre por qué las organizaciones preferirían C sobre C ++. No lo sé, soy solo un pueblo ;-)

En defensa de C ++, trae características valiosas a la mesa; sin embargo, el que más valoro probablemente sea el polimorfismo paramétrico (''ish): operaciones y tipos que toman uno o más tipos como argumentos.

Aunque a la gente parece gustarle complain de C ++, no he podido encontrar mucha evidencia sobre por qué querría elegir C sobre C ++. C no parece tener tanta flak y si C ++ tiene todos estos problemas, ¿por qué no puedes limitarte al subconjunto C? ¿Cuáles son tus pensamientos / experiencias?


Además de varios otros puntos mencionados anteriormente:

Menos sorpresa

es decir, es mucho más fácil ver qué hará exactamente un código. En C ++ necesitas acercarte al nivel de gurú para poder saber exactamente qué código genera el compilador (prueba una combinación de plantillas, herencia múltiple, constructores autogenerados, funciones virtuales y mezcla un poco de magia de espacio de nombres y búsqueda dependiente de argumentos).

En muchos casos, esta magia es agradable, pero por ejemplo en sistemas en tiempo real realmente puede arruinar tu día.


Elijo escribir en C porque me gusta trabajar con un lenguaje pequeño y ajustado. Me gusta tener acceso a un estándar que se puede leer en un tiempo razonable (para mí, soy un lector muy lento). Además, lo uso para escribir software para sistemas integrados para los cuales existen pocos compiladores deseables de C ++ (como algunos microcontroladores PIC).


Esto es bastante superficial, pero como estudiante ocupado elegí C porque pensé que C ++ tardaría demasiado en aprender. Muchos profesores de mi universidad no aceptarán asignaciones en Python y necesitaba recoger algo rápidamente.


Estoy acostumbrado a usar C ++ para mis proyectos. Luego conseguí un trabajo en el que se usa la C simple (una base de código evolutiva de 20 años de un software AV con documentación deficiente ...).

Las 3 cosas que me gustan en C son:

  • Nada está implícito: puedes ver lo que hace o no tu programa exactamente. Esto hace que la depuración sea más fácil.

  • La falta de espacios de nombres y sobrecargas puede ser una ventaja: si desea saber dónde se llama una determinada función, simplemente grep a través del directorio del código fuente y se lo dirá. No se necesitan otras herramientas especiales.

  • Redescubrí el poder de los indicadores de función. Básicamente te permiten hacer todas las cosas polimórficas que haces en C ++, pero son aún más flexibles.


Estoy sorprendido de que no haya bibliotecas mencionadas. Muchos lenguajes pueden enlazarse con C libs y llamar a funciones C (incluyendo C ++ con extern "C"). C ++ es prácticamente lo único que puede usar una lib de C ++ (definida como ''una lib que usa características en C ++ que no están en C [como funciones sobrecargadas, métodos virtuales, operadores sobrecargados, ...], y no exporta todo a través de interfaces compatibles con C a través de extern "C" '').


La mayoría de las características significativas de c ++ de alguna manera involucran clases o plantillas. Estas son características maravillosas, excepto por la forma en que el compilador las transforma en código objeto. La mayoría de los compiladores utilizan el cambio de nombre, y los que no hacen algo al menos tan desordenado.

Si su sistema vive solo, como es el caso de muchas aplicaciones, entonces C ++ es una buena elección.

Si su sistema necesita interactuar con software no necesariamente escrito en C ++ (más frecuentemente en ensamblador, o bibliotecas Fortran), entonces se encuentra en un aprieto. Para interactuar con ese tipo de casos, deberá desactivar el cambio de nombre para esos símbolos. esto generalmente se hace declarando esos objetos al extern "C" , pero luego no pueden ser plantillas, funciones sobrecargadas o clases. Si es probable que esas aplicaciones sean su API de aplicaciones, deberá envolverlas con funciones auxiliares y mantener esas funciones sincronizadas con las implementaciones reales.

Y, en realidad, el lenguaje C ++ proporciona una sintaxis estándar para las características que se pueden implementar fácilmente en C. puro

En resumen, la sobrecarga de C ++ interoperable es demasiado alta para que la mayoría de la gente lo justifique.


La respuesta de Joel es buena por razones por las que deberías usar C, aunque hay algunas otras:

  • Debe cumplir con las pautas de la industria, que son más fáciles de probar y probar en C.
  • Tienes herramientas para trabajar con C, pero no con C ++ (piensa no solo en el compilador, sino en todas las herramientas de soporte, cobertura, análisis, etc.)
  • Tus desarrolladores objetivo son gurús C
  • Está escribiendo controladores, núcleos u otro código de bajo nivel
  • Usted sabe que el compilador de C ++ no es bueno para optimizar el tipo de código que necesita para escribir
  • Su aplicación no solo no se presta a ser orientada a objetos, sino que sería más difícil escribir en esa forma

Sin embargo, en algunos casos, es posible que desee utilizar C en lugar de C ++:

  • Desea el rendimiento del ensamblador sin el problema de la codificación en ensamblador (C ++ es, en teoría, capaz de un rendimiento "perfecto", pero los compiladores no son tan buenos para ver las optimizaciones que verá un buen programador de C)
  • El software que estás escribiendo es trivial, o casi, saca el pequeño compilador de C, escribe unas pocas líneas de código, compila y ya estás listo, sin necesidad de abrir un gran editor con ayudantes, sin necesidad de escribir prácticamente. clases vacías e inútiles, ocuparse de espacios de nombres, etc. Puede hacer casi lo mismo con un compilador de C ++ y simplemente usar el subconjunto C, pero el compilador C ++ es más lento, incluso para programas pequeños.
  • Necesita un rendimiento extremo o un tamaño de código pequeño, y sabe que el compilador de C ++ en realidad lo hará más difícil de lograr debido al tamaño y el rendimiento de las bibliotecas.

Afirma que podría usar el subconjunto C y compilar con un compilador C ++, pero descubrirá que si lo hace obtendrá resultados ligeramente diferentes según el compilador.

De todos modos, si estás haciendo eso, estás usando C. ¿Realmente tu pregunta es "¿Por qué los programadores de C no usan compiladores de C ++?" Si es así, entonces o no comprende las diferencias de idioma, o no comprende la teoría del compilador.


La respuesta de Linus a su pregunta es "Porque C ++ es un lenguaje horrible"

Su evidencia es anecdótica en el mejor de los casos, pero él tiene un punto ...

Siendo más un lenguaje de bajo nivel, lo preferiría a C ++ .. C ++ es C con bibliotecas añadidas y compatibilidad con el compilador para características adicionales ( ambos lenguajes tienen características que el otro idioma no tiene, e implementa las cosas de manera diferente ), pero si tiene el tiempo y la experiencia con C, puede beneficiarse de poderes adicionales de nivel bajo añadidos ... [Editado] (porque se acostumbra a hacer más trabajo manualmente en lugar de beneficiarse de algunos poderes provenientes del lenguaje / compilador)

Agregar enlaces:

Por qué C ++ para incrustado

¿Por qué sigues usando C? PDF

Me gustaría google esto ... porque ya hay muchos comentarios en la web


Lo que C necesitaba era un preprocesador mejor. cfront fue uno y así nació c ++

Usaría C, donde el ''c ++ como preprocesador'' no estaría bien.

Estoy bastante seguro de que en la parte inferior de cualquier biblioteca / framework / toolkit c ++ bien escrita, encontraría dirty-old-c (o versiones estáticas, que es lo mismo)


Los temores de rendimiento o hinchazón no son una buena razón para renunciar a C ++. Cada idioma tiene sus riesgos potenciales y compensaciones: los buenos programadores aprenden sobre esto y, cuando sea necesario, desarrollan estrategias de afrontamiento, los programadores pobres caerán en falta y culparán al idioma.

En muchos sentidos, Python interpretado es un lenguaje "lento", pero para tareas no triviales, un programador experto en Python puede producir fácilmente código que se ejecuta más rápido que el de un desarrollador C inexperto.

En mi industria, los videojuegos, escribimos código de alto rendimiento en C ++ al evitar cosas como RTTI, excepciones o funciones virtuales en bucles internos. Estos pueden ser extremadamente útiles pero tienen problemas de rendimiento o hinchazón que es deseable evitar. Si tuviéramos que dar un paso más y cambiar por completo a C ganaríamos poco y perderíamos las construcciones más útiles de C ++.

La razón práctica más importante para preferir C es que el soporte está más extendido que C ++. Hay muchas plataformas, particularmente integradas, que ni siquiera tienen compiladores de C ++.

También está la cuestión de la compatibilidad para los vendedores. Mientras que C tiene una ABI (Interfaz Binaria de Aplicación) estable y bien definida, C ++ no. El ABI en C ++ es más complicado debido a elementos como vtables y constructurs / destructores, por lo que se implementa de forma diferente con cada proveedor, e incluso con versiones de una cadena de herramientas de proveedores.

En términos reales, esto significa que no puede tomar una biblioteca generada por un compilador y vincularla con un código o una biblioteca de otra, lo que crea una pesadilla para los proyectos distribuidos o proveedores de middleware de bibliotecas binarias.


Los tiempos de compilación largos pueden ser molestos. Con C ++ puede tener tiempos de compilación muy largos (lo que significa, por supuesto, ¡más tiempo para !).


Oh my, C vs C ++, una excelente manera de comenzar una guerra de llamas. :)

Creo que C es mejor para el controlador y el código incrustado.

C ++ tiene algunas características excelentes que C no tiene, pero muchas de las características orientadas a objetos de C ++ pueden causar problemas de codificación monumentales cuando las personas escriben código con efectos secundarios no obvios que ocurren detrás de escena. El código loco se puede esconder en constructores, destructores, funciones virtuales, ... La belleza del código C es que el lenguaje no hace nada obvio a tus espaldas, así puedes leer el código y no tener que mirar cada constructor y destructor y así. Gran parte del problema son las malas prácticas de codificación de ALGUNAS personas.

Mi lenguaje perfecto sería una combinación de C99 más un subconjunto mínimo de capacidades de C ++ más seguras que agrega sobrecarga del compilador ZERO (o casi cero) a la salida binaria. Las adiciones perfectas serían la encapsulación de clases y el nombramiento de conceptos de datos y funciones.


Porque están escribiendo un complemento y C ++ no tiene ABI estándar.


Porque estás escribiendo para un sistema en el que los recursos son escasos (como un sistema integrado, o algún tipo de código de metal puro como un kernel) y quieres la menor sobrecarga posible.

Hay una razón por la cual la mayoría de los sistemas integrados no tienen un compilador de C ++; no es que las personas no quieran, es que meter código de C ++ en ese pequeño espacio es una tarea que se acerca imposible.


Porque para muchas tareas de programación, C es más simple y lo suficientemente bueno. Cuando estoy programando utilidades livianas especialmente, puedo sentir que C ++ quiere que construya una superestructura elegante por sí misma, en lugar de simplemente escribir el código.

OTOH, para proyectos más complejos, la elegancia proporciona un rigor estructural sólido más bueno que el que naturalmente saldría de mi teclado.


Porque quieren usar características en C99 que no tienen equivalentes en C ++.

Sin embargo, no hay tantas características C99 que sean útiles para C ++ como la gente piensa a primera vista. Arrays de longitud variable? C ++ tiene std :: vectores. ¿Soporte para números complejos / imaginarios? C ++ tiene un tipo complejo con plantilla. Tipo de funciones matemáticas genéricas? C ++ sobrecargó las funciones matemáticas estándar, causando el mismo resultado.

Inicializadores con nombre? No en C ++, pero hay una solución:

struct My_class_params { int i; long j; std::string name; My_class_params& set_i(int ii) { i = ii; return *this; } My_class_params& set_j(long jj) { j = jj; return *this; } template <typename STRING> My_class_params& set_name(STRING&& n) { name = std::forward<STRING>(n); return *this; } My_class_params() { // set defaults } }; class My_class { My_class_params params; public: My_class(const My_class_params& p) : params(p) { } ... };

Esto le permite escribir cosas como:

My_class mc(My_class_params().set_i(5).set_name("Me"));


Si quiere que su código sea entendido por prácticamente cualquier programador, escriba en C.


También existe el enfoque que toman algunas tiendas de usar algunas de las características de C ++ de forma similar a C, pero evitando aquellas que son objetables. Por ejemplo, usar clases y métodos de clase y sobrecarga de funciones (que generalmente son fáciles de soportar incluso para los fanáticos de C), pero no el STL, los operadores de flujo y Boost (que son más difíciles de aprender y pueden tener malas características de memoria).


Tomo la otra vista: ¿por qué usar C ++ en lugar de C?

El libro The C Programming Language (también conocido como: K & R) le dice claramente cómo hacer todo lo que el lenguaje puede hacer en menos de 300 páginas. Es una obra maestra del minimalismo. Ningún libro de C ++ incluso se acerca.

El contraargumento obvio es que lo mismo podría decirse de la mayoría de los lenguajes modernos, si no de todos, tampoco pueden decirle cómo hacer todo en solo unos pocos cientos de páginas. Cierto. Entonces, ¿por qué usar C ++? ¿Característica de riqueza? ¿Poder? Si necesita algo más rico en funciones o potente, entonces vaya con C #, Objective C, Java o algo similar. ¿Por qué cargarse con las complejidades de C ++? Si necesita el grado de control de las subvenciones de C ++, entonces le pido que use C. C puede hacer cualquier cosa y puede hacerlo bien.


Un comentario sobre "simplemente use el subconjunto de C ++ que desea usar": el problema con esta idea es que tiene un costo para exigir que todos en el proyecto utilicen el mismo subconjunto. Mi propia opinión es que esos costos son bastante altos para proyectos débilmente acoplados (por ejemplo, de código abierto), y también que C ++ falló totalmente en ser una mejor C, en el sentido de que no se puede usar C ++ donde sea que se use C.


Yo diría que C le da un mejor control sobre la optimización y la eficiencia que C ++ y, por lo tanto, sería útil en situaciones donde la memoria y otros recursos son limitados y cada optimización ayuda. También tiene una huella más pequeña, por supuesto.


me gusta el minimalismo y la simplicidad.


  • Hasta hace algunos años, a los compiladores de C ++ existentes les faltaban características importantes, o el soporte era escaso y las características compatibles variaban enormemente entre ellas, por lo que era difícil escribir aplicaciones portátiles.
  • Debido a la ausencia de nombres estándar de los símbolos, es difícil para otros lenguajes / aplicaciones admitir clases de C ++ directamente.

  • Porque ya saben C
  • Porque están creando una aplicación integrada para una plataforma que solo tiene un compilador de C
  • Porque están manteniendo el software heredado escrito en C
  • Está escribiendo algo en el nivel de un sistema operativo, un motor de base de datos relacional o un motor de videojuegos 3D para minoristas.