C VS. C ++
- 1459
- 154
- Adriana Preciado
Esta es una comparación objetiva de las aplicaciones, el uso y las características del lenguaje de C y C++. También se discuten la trayectoria de los orígenes y el desarrollo de los dos lenguajes de programación.
Cuadro comparativo
Diferencias - similitudes -C | C++ | |
---|---|---|
|
| |
Diseñada por | Dennis Ritchie | Bjarne Stroustrup |
Recolección de basura | Manual; Permite una mejor gestión de la memoria. | No hay GC disponible en la biblioteca estándar C ++ (STD). Sin embargo, STD proporciona formas eficientes y deterministas de gestionar los recursos, como la propiedad de objetos y el recuento de referencias. |
Influenciado por | B (BCPL, CPL), Algol 68, ensamblaje | C, Simula, Ada 83, Algol 68, CLU, ML |
Apareció en | 1972 | 1985 |
Clases | Utiliza estructuras y, por lo tanto, otorga más libertad para usar elementos de diseño internos | clase y estructura |
OOP (programación orientada a objetos) | No construido; Libertad para configurar estructuras para actuar como objetos. Carece de la capacidad de declarar la encapsulación. | Construido; El diseño de los objetos de tamaño y memoria es determinista. Las llamadas de función virtual se pueden realizar sin VTable a través de CRTP. |
Implementaciones importantes | GCC, MSVC, Borland C, Watcom C | Collection de compiladores GNU, Microsoft Visual C ++, Borland C ++ Builder, Intel C ++ Compiler, LLVM/Clang |
Disciplina de escritura | Estático, débil | Estático, fuerte, inseguro, nominativo |
Bloquear comentarios delimitador | /* y */ | /* y */ |
Terminadores de declaración | ; | ; |
Delimitador de comentarios en línea | // | // |
Influenciado | AWK, CSH, C ++, C#, Objective-C, BITC, D, Concurrente C, Java, JavaScript, Limbo, Perl, PHP | Ada 95, C#, Java, Php, D, Aikido |
Extensiones habituales del nombre de archivo | .C | .CC, .CPP, .cxx, .H, .S.S, .HPP |
Paradigmas | Lenguaje de implementación de sistemas imperativo (procedimiento) | Multiparadigma, orientado a objetos, genérico, procedimiento, funcional, meta |
Matrices de tamaño dinámico | No | No |
Plataformas | Casi cualquier cosa en el planeta; requiere recompilar | Casi cualquier cosa, incluidas las plataformas basadas en el sistema operativo y no basado en el sistema operativo |
Velocidad | Las aplicaciones C son más rápidas para compilar y ejecutar que las aplicaciones C ++ | +-5% en comparación con C si sabe cómo hacer un buen uso de C++. El rendimiento de los programas C ++ y C a menudo puede ser igual, ya que los compiladores para ambos idiomas son maduros. |
Flujo de ejecución | De arriba hacia abajo | De arriba hacia abajo |
Programación incluido | #incluir | #incluir |
Tipo de cadena de programación | Sin tipo de cadena nativa; a menudo declarado como una variedad de personajes | Matriz, std :: cadena |
Programación-entrada /salida | scanf para entrada; printf para la salida | iOStream, fstream (std :: cin, std :: cout) |
Código | Compilado a archivos ejecutables binarios nativos utilizando un compilador como BCC. | Compilado a archivos ejecutables binarios nativos |
Tipo de idioma | Lenguaje orientado a procedimiento | Lenguaje orientado a objetos multiparadigma |
Desarrollado por | Dennis Ritchie y Bell Labs | Bjarne Stroustrup |
Orientado a objetos | No de forma nativa | Sí |
Programación genérica | No | Sí |
Programación de procedimiento | Sí | Sí |
Programación funcional | Sí | Parcial |
Metaprograma | No | Sí |
Reflexión | No | No |
Matrices multidimensionales compatibles | Sí | Sí |
Plataforma | Cualquiera que tenga un compilador | Cualquiera que tenga un compilador |
Orígenes de C y C++
Dennis Ritchie de Bell Labs diseñó el C, un lenguaje de programación de computadoras de propósito general en 1972 para su uso con Unix, un sistema operativo de entonces. C se usa predominantemente para la programación de software del sistema, pero también es muy útil para crear un software de aplicación general. Algunos de los adjetivos utilizados para describir C son lenguaje estructurado, imperativo y de procedimiento de bloque.
C ++ (originalmente llamado "C con clases" y aún conocida como la superestructura de C en los círculos de computadora) se desarrolló como una mejora de C por Bjarne Stroustrup en 1983 en los Bell Labs. Stroustrup, en 1979, comenzó agregando clases, funciones virtuales, sobrecarga del operador, herencia múltiple, plantillas, manejo de excepciones, etc. El estándar del lenguaje de programación C ++ se ratificó como ISO/IEC 14882: 1998 en 1998 y la versión actual es la versión 2003, ISO/IEC 14882: 2003, que de hecho es la versión corregida del C ++ 1998. El "Informe técnico de la Biblioteca 1", publicado en 2005, proporciona detalles de las extensiones a la biblioteca estándar sin ser parte de la versión Standar. Se está desarrollando una nueva versión del estándar (conocido informalmente como C ++ 0x). C ++ ha sido un lenguaje de programación comercial altamente exitoso desde 1990. Aunque C ++ está libre de regalías, su documentación no está disponible gratuitamente.
Uso de C VS. C++
C demostró ser muy útil en la ejecución de aplicaciones codificadas en el lenguaje de ensamblaje debido a sus fortalezas como un compilador simple, niveles de acceso de acceso más bajos, soporte de tiempo de ejecución más bajo y un lenguaje de construcción eficiente que estaba sincronizado con las instrucciones de hardware. Otro de sus créditos es que es un altamente portátil (compatible con una variedad de OS y plataformas) con cambios de código fuente muy mínimos requeridos. Por lo tanto, ha habilitado las operaciones remotas e independencia del hardware. C también cumple con una variedad de estándares, lo que hace que funcione con todo.
C ++ se conoce como un lenguaje de nivel medio. Debido al hecho de que el C ++ comprende las características de lenguaje de alto nivel y de bajo nivel. Algunos de los adjetivos utilizados para describir C ++ son programas de procedimiento de forma estática, forma libre, de forma múltiple y de apoyo.
Stroustrup, mientras se programaba para su pH.D tesis, descubrió que el lenguaje Simula tenía funciones de alto nivel útiles para el desarrollo de software grande, pero era demasiado lento para un uso práctico, mientras que el BCPL (lenguaje) era rápido, pero demasiado bajo y, por lo tanto, inadecuado para el desarrollo de software grande. En Bell Labs, tuvo que analizar el núcleo Unix con respecto a la computación distribuida que creó más problemas y se propuso mejorar la C (debido a su naturaleza ultra portátil) con características de Simula. C ++ se creó en 1983 con características adicionales como funciones virtuales, nombre de función y sobrecarga de operadores, referencias, constantes, memoria libre controlada por el usuario, verificación de tipo mejorada y comentarios de una sola línea con dos cortes de reenvío (//). El CFRONT (versión comercial) se lanzó en 1985 con la clase, la clase derivada, la verificación de tipo fuerte, la insulta y las características de argumentos predeterminados. 1985 también vio el lanzamiento del lenguaje de programación C ++, una referencia importante al lenguaje en ausencia de un estándar oficial. Esto fue seguido por el lanzamiento del C ++ 2.0 en 1989 con características como herencia múltiple, clases abstractas, funciones de miembros estáticos, funciones de miembros constante y miembros protegidos. Se agregaron características como plantillas, excepciones, espacios de nombres, nuevos yes y tipo booleano después de 1990.
Junto con el idioma, su biblioteca también evolucionó, con varias adiciones como la biblioteca de E/S de transmisión, la biblioteca de plantillas estándar, etc.
Las primeras ediciones del libro K&R escrito por Dennis Ritchie & Brian Kernighan (Nombre original: el lenguaje de programación C) describe su versión de C como el K&R C con especificaciones completas, mientras que las ediciones posteriores incluyen el ANSI (Estándares Nacionales Americanos Nacionales Instituto) estándares C. Algunas de las características sobresalientes descritas son la introducción de varios tipos de datos, la eliminación de varias ambigüedades semánticas, la omisión de otras declaraciones de funciones, etc. Incluso después de la introducción del ANSI C, el K&R C continuó siendo el lenguaje de programación más portátil para programadores debido a sus compatibilidades más amplias.
Las declaraciones de la función de K&R no incluyeron ninguna información sobre los argumentos de la función que condujeron al incumplimiento de las verificaciones de tipo de parámetro de función, aunque algunos compiladores emitieron un mensaje de advertencia si se llamaba a una función local con el número incorrecto de argumentos o si múltiples llamadas a una función externa utilizada diferentes números de argumentos. Se crearon herramientas como la utilidad de la pelusa de Unix para verificar la consistencia de las funciones utilizadas en múltiples archivos de origen.
Características del lenguaje
Características de C
Algunas de las características importantes de C son las siguientes:
- Instalaciones de programación estructuradas
- Confirmando a las tradiciones de Algol
- Evaluación de cortocircuito: uso de un solo operando si el resultado se puede determinar solo con él
- Sistema de tipificación estática para evitar operaciones no deseadas
- Valor pasó los parámetros con relevancia para el valor del valor del puntero
- Combinación de datos heterogéneas y manipulación
- Palabras clave reservadas y texto fuente de formato libre
- Mayor número de operadores compuestos, como +=, ++
- Enorme capacidad de ocultación variable, aunque las definiciones de funciones no son nestables
- Personaje: uso de enteros similar al lenguaje de ensamblaje
- Acceso de bajo nivel a la memoria de la computadora a través de direcciones de la máquina y punteros mecanografiados
- Los punteros de la función permiten formas rudimentarias de cierres y tiempo de ejecución polimórfica
- Indexación de matriz definida por aritmética de puntero (noción secundaria)
- Procesador estandarizado para definir macros, incluidos los archivos de código fuente y las compilaciones condicionales
- Entrada/salida compleja y funciones matemáticas con delegación consistente a las rutinas de la biblioteca
- Sintaxis igual que "B" (predecesor de C) pero diferente de Algol E.gramo.: ... reemplazado comienza ... fin, && y || reemplazado y y o, que
- Mientras que B usado y y | En ambos significados, C los hizo sintácticamente distintos de los operadores de bits
- Similitudes a fortran e.G: El signo igual para la asignación (copia) y dos firmas iguales consecutivas para probar la igualdad (compárese con la ecuación) o el signo igual en BASIC)
Otras características no oficiales agregadas con el tiempo fueron:
- Funciones vacías
- Funciones que devuelven tipos de estructura o sindicato en lugar de punteros
- Asignaciones habilitadas para tipos de datos de estructura
- Const calificador para hacer un objeto de solo lectura
- Tipos enumerados
- Creación de herramienta para evitar los problemas inherentes del idioma
Pronto C se volvió lo suficientemente poderoso como para reescribirse el núcleo Unix (escrito en un idioma de ensamblaje), lo que lo convierte en uno de los primeros núcleos del sistema operativo escrito en un idioma aparte de los idiomas de ensamblaje.
Características de C++
- C ++ está diseñado para ser un lenguaje de propósito general escrito estáticamente que es tan eficiente y portátil como C
- C ++ está diseñado para admitir directa e integralmente múltiples estilos de programación (programación de procedimientos, abstracción de datos, programación orientada a objetos y programación genérica)
- C ++ está diseñado para darle al programador la opción, incluso si esto hace posible que el programador elija incorrectamente
- C ++ está diseñado para ser lo más compatible de C como sea posible, proporcionando una transición suave de C
- C ++ evita las características que son específicas de la plataforma o no del propósito general
- C ++ no incurre en sobrecarga para las características que no se usan
- C ++ está diseñado para funcionar sin un entorno de programación sofisticado
El polimorfismo, una de las cualidades prominentes de C ++, permite implementaciones más importantes con una sola interfase y para que los objetos actúen de acuerdo con las circunstancias. C ++ admite polimorfismos estáticos (tiempo de compilación) y dinámico (tiempo de ejecución). El polimorfismo en tiempo de compilación no permite ciertas decisiones en tiempo de ejecución, mientras que el polimorfismo en tiempo de ejecución generalmente incurre en una penalización de rendimiento. C ++, aunque se considera un superconjunto de C, existen algunas diferencias que hacen que algunos códigos C válidos no sean inválidos en C ++ o se comporten de manera diferente en C++. Problemas como el C ++ que definen nuevas palabras clave, a saber, New & Class, que se utilizan como identificadores en C. Los códigos C y C ++ se pueden entremezclarse declarando cualquier código C que se llame desde/use en C ++ con enlace C y colocándolo dentro de un código externo "C" / * C */ bloque.
Desarrollos en los dos idiomas
Con el tiempo, la estandarización se volvió cada vez más importante debido a un gran número de extensiones y una biblioteca aleatoria con una creciente popularidad del lenguaje y la falta de implementación precisa de los compiladores según las especificaciones. Uno de los objetivos del proceso de estandarización de C era producir un superconjunto de K&R C, incorporando muchas de las características no oficiales introducidas posteriormente. Sin embargo, el comité de estándares incluyó varias características nuevas, como prototipos de funciones, punteros nulos, apoyo para conjuntos y locales internacionales y un preprocesador más capaz. La sintaxis para las declaraciones de parámetros también se aumentó. Después de la década de 1970, C reemplazó Basic como el lenguaje líder para la programación de microprocesadores y se hizo popular con su colaboración con las PC IBM. Mientras tanto, Bjarne Stroustrup y otros en Bell Labs comenzaron a trabajar en la creación de C ++, que agregó construcciones de lenguaje de programación orientado a objetos a C. Además, ANSI formó un comité en 1983 llamado X3J11, para establecer una especificación estándar de C y en 1989, el estándar se ratificó como ANSI X3.159-1989 "Lenguaje de programación C."Esta es la versión de C que a menudo se conoce como Ansi C, estándar C o C89. C90, introducido en 1990, fue AME como C89 salvo algunos cambios menores. Mientras que C ++ evolucionó rápidamente, C permaneció estático hasta 1995 cuando la enmienda normativa 1 creó un nuevo estándar que se sometió a una revisión adicional, lo que llevó a la publicación de ISO 9899: 1999 en 1999. Este estándar se conoce comúnmente como "C99."Fue adoptado como un estándar ANSI en marzo de 2000. Algunas de las funciones más nuevas se mencionan a continuación:
- Funciones en línea
- Capacidad para declarar variables en cualquier lugar, en lugar de solo después de otra declaración o al comienzo de una declaración compuesta
- Nuevos tipos de datos como Long Long int, tipos enteros extendidos opcionales, tipo de datos booleanos explícitos y tipo complejo para denotar números complejos
- Las longitudes de matriz pueden ser variables
- Comentarios de una línea que comienzan con // compatible
- Funciones de la biblioteca como Snprintf
- Nuevos archivos de encabezado, como stdbool.hy inttypes.H
- Funciones de matemáticas de tipo genérico (tgmath.h)
- Soporte mejorado para el punto flotante IEEE
- Inicializadores designados
- Literales compuestos
- Soporte para macros variádicos (macros de aridad variable)
C ++, mientras continúa evolucionando para cumplir con los requisitos del futuro, una versión más nueva llamada C ++ 0x denota que se espera que se lance antes de que 2010 se desarrolle actualmente. Las indicaciones sugieren que C ++ continuará capitalizando su naturaleza multiparadigma y las mejoras notables pueden ser un apoyo nativo para el enhebrado y los conceptos, lo que facilita el trabajo con Templete. Más controvertido, agregar recolección de basura se encuentra actualmente en una fuerte discusión. Un grupo llamado BOOST.org, que asesora al Comité de Normas C ++ sobre buenas características y mejoras requeridas, está funcionando ampliamente para desarrollar C ++ en su forma actual con habilidades funcionales y de metaprograma ampliadas.
En el diseño y la evolución de C ++ (1994), Bjarne Stroustrup describe algunas reglas que utilizó para diseñar la C++. Conocer las reglas ayuda a entender por qué C ++ es la forma en que es. Se pueden encontrar mucho más detalles en el diseño y la evolución de C++.
Influencias
La influencia de C se puede rastrear para obras como AWK, CSH, C ++, C#, D, Objective-C, Concurrent-C, BITC, Java y JavaScript, Limbo, Perl, PHP, etc. Algunas de las principales implementaciones de C incluyen Borland C, Watcom C, GCC y MSVC. C ++, para su crédito ha influido en otros trabajos como D, C#, ADA 95, Aikido, Java y PHP.
Críticas a C vs. C++
A pesar de su popularidad, C ha sido criticado por que las operaciones deseables sean demasiado difíciles de lograr y las operaciones indeseables son demasiado fáciles de invocar accidentalmente, involucrando más habilidades, experiencia, esfuerzo y atención al detalle del programador. del idioma.
Cuando los idiomas orientados a objetos se hicieron populares, C ++ era una extensión de C que proporcionaba capacidades orientadas a objetos con C ++ originalmente implementado como preprocesador: el código fuente se tradujo a C, y luego se compiló con un compilador C C.
C ++ derivado de c, también heredan la mayoría de las críticas niveladas contra C. Pero dado que el idioma es en realidad una composición de dos idiomas diferentes, junto con la carga de grandes programas, a menudo terminan haciendo que la compilación sea enorme e inapropiada en términos de tamaño puro. Cuando este problema se intenta evitarse, al deshabilitar algunos de los códigos marginales, nuevamente fue criticado por perder varias utilidades importantes. El creador de C ++ también siente que C ++ está justificado para ser un lenguaje complejo ya que los requisitos de programación de hoy en día también han aumentado de una manera enorme en comparación con los ant.