C VS. C ++
- 2692
- 101
- Adrien Jean
Il s'agit d'une comparaison objective des applications, des caractéristiques de l'utilisation et du langage de C et C++. Les origines et la trajectoire de développement des deux langages de programmation sont également discutées.
Tableau de comparaison
Différences - similitudes -C | C++ | |
---|---|---|
|
| |
Conçu par | Dennis Ritchie | Bjarne Stroustrup |
Collecte des ordures | Manuel; Permet une meilleure gestion de la mémoire. | Aucun GC disponible sur la bibliothèque standard C ++ (STD). Cependant, STD fournit des moyens efficaces et déterministes de gérer les ressources telles que la propriété des objets et le comptage de références. |
Influencé par | B (BCPL, CPL), Algol 68, Assemblage | C, Simula, Ada 83, Algol 68, CLU, ML |
Apparaît dans | 1972 | 1985 |
Des classes | Utilise à la place des structures et confère donc plus de liberté d'utiliser des éléments de conception internes | classe et structure |
OOP (programmation orientée objet) | Pas intégré; Liberté de configurer des structures pour agir comme des objets. Manque la capacité de déclarer l'encapsulation. | Intégré; La taille et la disposition de la mémoire des objets sont déterministes. Les appels de fonction virtuelle peuvent être effectués sans VTable via CRTP. |
Implémentations majeures | GCC, MSVC, Borland C, Watcom C | Collection du compilateur GNU, Microsoft Visual C ++, Borland C ++ Builder, compilateur Intel C ++, LLVM / Clang |
Discipline à saisir | Statique, faible | Statique, fort, dangereux, nominatif |
Bloquer les commentaires délimiter | /* et */ | /* et */ |
Déclaration des terminateurs | ; | ; |
COMMENTAIRES EN LIGNE DÉLIMITE | // | // |
Influencé | awk, csh, c ++, c #, objective-c, bitc, d, simultanément c, java, javascript, limbo, perl, php | Ada 95, C #, Java, PHP, D, Aikido |
Extensions de nom de fichier habituelles | .c | .CC, .cpp, .cxx, .H, .HH, .hpp |
Paradigmes | Langue de mise en œuvre des systèmes impératifs (procéduraux) | Multi-paradigme, orienté objet, générique, procédural, fonctionnel, méta |
Tableaux de taille dynamiquement | Non | Non |
Plates-formes | Presque tout sur la planète; nécessite de recompiler | Presque tout, y compris les plateformes basées sur le système d'exploitation et non basées sur le système d'exploitation |
Vitesse | Les applications C sont plus rapides à compiler et à exécuter que les applications C ++ | +-5% par rapport à C si vous savez comment faire un bon usage de C++. Les performances des programmes C ++ et C peuvent souvent être égales, car les compilateurs pour les deux langues sont matures. |
Flux d'exécution | De haut en bas | De haut en bas |
Programmation incluant | #inclure | #inclure |
Type de chaîne de programmation | Aucun type de chaîne natif; Souvent déclaré comme un éventail de personnages | Array, std :: String |
Programmation-entrée / sortie | scanf pour la saisie; printf pour la sortie | iostream, fstream (std :: cin, std :: cout) |
Code | Compilé avec des fichiers exécutables binaires natifs à l'aide d'un compilateur comme BCC. | Compilé avec des fichiers exécutables binaires natifs |
Type de langue | Langue orientée procédurale | Langue orientée objet multi-paradigme |
Développé par | Dennis Ritchie & Bell Labs | Bjarne Stroustrup |
Orienté objet | Pas nativement | Oui |
Programmation générique | Non | Oui |
Programmation procédurale | Oui | Oui |
Programmation fonctionnelle | Oui | Partiel |
Métaprogrammation | Non | Oui |
Réflexion | Non | Non |
Tableaux multidimensionnels pris en charge | Oui | Oui |
Plateforme | Celui qui a un compilateur | Celui qui a un compilateur |
Origines de c et c++
Dennis Ritchie de The Bell Labs a conçu le C, un langage de programmation informatique à usage général en 1972 pour une utilisation avec Unix, un système d'exploitation alors. C est principalement utilisé pour la programmation du logiciel système, mais est également très utile pour créer un logiciel d'application général. Certains des adjectifs utilisés pour décrire C sont un langage structuré, impératif et procédural.
C ++ (nommé à l'origine "C avec des classes" et toujours connu sous le nom de superstructure de C dans les cercles informatiques) a été développé comme une amélioration de C par Bjarne Stroustrup en 1983 au Bell Labs. Stroustrup, en 1979, a commencé par ajouter des cours, des fonctions virtuelles, une surcharge de l'opérateur, un héritage multiple, des modèles, une manipulation des exceptions, etc. La norme de langage de programmation C ++ a été ratifiée en tant qu'ISO / IEC 14882: 1998 en 1998 et la version actuelle est la version 2003, ISO / IEC 14882: 2003 qui est en fait la version corrigée du C ++ 1998. Le "Library Technical Report 1", publié en 2005, donne des détails sur les extensions de la bibliothèque standard sans faire partie de la version standard. Une nouvelle version de la norme (informelle connue sous le nom de C ++ 0x) est en cours de développement. C ++ est un langage de programmation commercial très réussi depuis 1990. Bien que C ++ soit libre de droits, sa documentation n'est pas disponible librement.
Utilisation de C vs. C++
C s'est avéré très utile pour exécuter des applications codées dans le langage d'assemblage en raison de ses forces comme un compilateur simple, des niveaux de mémoire à un accès inférieur, une prise en charge du temps d'exécution inférieure et un langage de construction efficace qui était synchronisé avec les instructions matérielles. Un autre de ses crédits est qu'il est un très portable (compatible avec une variété de systèmes d'exploitation et de plates-formes) avec des modifications de code source très minimes requises. Il a donc permis les opérations à distance et l'indépendance du matériel. C est également conforme à une variété de normes, ce qui le fait fonctionner avec tout.
C ++ est connu comme une langue de niveau intermédiaire. En raison du fait que le C ++ comprend à la fois des fonctionnalités linguistiques de haut niveau et de bas niveau. Certains des adjectifs utilisés pour décrire C ++ sont typés statiques, de forme libre, multi-paradigme et de programmation procédurale à l'appui.
Stroustrup, tout en programmation pour son pH.La thèse de D, a constaté que le langage Simula avait des caractéristiques de haut niveau utiles pour le développement de logiciels de grande. Dans Bell Labs, il a dû analyser le noyau Unix en ce qui concerne l'informatique distribuée qui a créé d'autres problèmes et il a décidé d'améliorer C (en raison de sa nature ultra portable) avec des fonctionnalités du Simula. C ++ a été créé en 1983 avec des fonctionnalités supplémentaires telles que des fonctions virtuelles, le nom de la fonction et la surcharge de l'opérateur, les références, les constantes, la mémoire libre contrôlée par l'utilisateur, la vérification de type améliorée et les commentaires à une seule ligne avec deux barres obliques (//) (//). Le CFront (version commerciale) a été publié en 1985 avec la classe, la classe dérivée, la vérification forte de la vérification, le recul et les fonctionnalités d'argument par défaut. 1985 a également vu la sortie du langage de programmation C ++, une référence importante à la langue en l'absence d'une norme officielle. Cela a été suivi par la sortie du C ++ 2.0 en 1989 avec des fonctionnalités comme l'héritage multiple, des classes abstraites, des fonctions de membres statiques, des fonctions membres const et des membres protégés. Des fonctionnalités telles que des modèles, des exceptions, des espaces de noms, de nouveaux moulages et un type booléen ont été ajoutés après 1990.
Avec la langue, sa bibliothèque a également évolué, avec plusieurs ajouts comme la bibliothèque d'E / S Stream, la bibliothèque de modèles standard, etc.
Les premières éditions du livre K&R écrites par Dennis Ritchie & Brian Kernighan (nom d'origine: le langage de programmation C) décrit leur version de C comme le K&R C avec des spécifications complètes, tandis que les éditions ultérieures incluent l'ANSI (normes nationales américaines américaines Institut) C normes. Certaines des caractéristiques saillantes décrites sont l'introduction de divers types de données, la suppression de plusieurs ambiguïtés sémantiques, l'omission d'autres déclarations de fonction, etc. Même après l'introduction de l'ANSI C, le K&R C a continué d'être le langage de programmation le plus portable pour les programmeurs en raison de ses compatibilités plus larges.
Les déclarations de la fonction K&R n'ont inclus aucune information sur les arguments de fonction conduisant à la non-performance des vérifications de type de paramètres de fonction, bien que certains compilateurs aient émis un message d'avertissement si une fonction locale était appelée avec le mauvais nombre d'arguments ou si plusieurs appels à une fonction externe utilisée différents nombres d'arguments. Des outils tels que l'utilitaire de charpèse d'Unix ont été créés pour vérifier la cohérence des fonctions utilisées sur plusieurs fichiers source.
Caractéristiques linguistiques
Caractéristiques de C
Certaines des caractéristiques importantes de C sont les suivantes:
- Installations de programmation structurée
- Confirmer aux traditions d'algol
- Évaluation de court-circuit - utilisation d'un seul opérande si le résultat peut être déterminé avec lui seul
- Système de frappe statique pour éviter les opérations involontaires
- Valeur a passé les paramètres avec pertinence pour passer la valeur du pointeur
- Combinaison et manipulation de données hétérogènes
- Mots-clés réservés et texte source de format libre
- Plus grand nombre d'opérateurs composés, tels que + =, ++
- Énorme capacité de cachette variable, bien que les définitions de fonction ne soient pas néesables
- Caractère - Utilisation des entiers similaire au langage d'assemblage
- Accès de bas niveau à la mémoire de l'ordinateur via des adresses machine et des pointeurs tapés
- Les pointeurs de fonction permettent des formes rudimentaires de fermetures et d'exécution polymorphe
- Indexation du tableau défini par arithmétique du pointeur (notion secondaire)
- Processeur standardisé pour définir les macros, y compris les fichiers de code source et les compilations conditionnelles
- Fonctions complexes d'entrée / sortie et mathématiques avec une délégation cohérente aux routines de la bibliothèque
- Syntaxe identique à «b» (prédécesseur de C) mais différent de l'algol e.g.: … Remplacé Begin… fin, && et || remplacé et & ou, qui
- Tandis que b utilisé & et | Dans les deux significations, C les a rendus syntaxiquement distincts des opérateurs de bit
- Similitudes avec Fortran E.G: Le signe égal pour l'attribution (copie) et deux signes égaux consécutifs pour tester l'égalité (par rapport à l'équation) ou le signe égal en basique)
Les autres caractéristiques non officielles ajoutées avec le temps étaient:
- Fonctions de vide
- Fonctions renvoyant des types de structure ou d'union au lieu de pointeurs
- Affectations activées pour les types de données struct
- Constal qualificateur pour créer un objet en lecture seule
- Types énumérés
- Création de l'outil pour éviter les problèmes inhérents de la langue
Bientôt, C est devenu suffisamment puissant pour que le noyau Unix (écrit dans une langue d'assemblage) soit réécrit en faisant l'un des premiers noyaux OS écrits dans une langue en dehors des langues d'assemblage.
Caractéristiques de C++
- C ++ est conçu pour être un langage statiquement typé et à usage général qui est aussi efficace et portable que C
- C ++ est conçu pour soutenir directement et de manière exhaustive plusieurs styles de programmation (programmation procédurale, abstraction de données, programmation orientée objet et programmation générique)
- C ++ est conçu pour donner le choix du programmeur, même si cela permet au programmeur de choisir incorrectement
- C ++ est conçu pour être aussi compatible avec C que possible, fournissant ainsi une transition en douceur de C
- C ++ évite les fonctionnalités spécifiques à la plate-forme ou non générales
- C ++ n'engage pas les frais généraux pour les fonctionnalités qui ne sont pas utilisées
- C ++ est conçu pour fonctionner sans un environnement de programmation sophistiqué
Le polymorphisme, l'une des qualités éminentes de C ++, permet à des implémentations avec une seule interphase et pour que les objets agissent selon les circonstances. C ++ prend en charge les polymorphismes statiques (temps de compilation) et dynamique (d'exécution). Le polymorphisme à temps de compilation ne permet pas certaines décisions d'exécution, tandis que le polymorphisme d'exécution entraîne généralement une pénalité de performance. C ++, bien que considéré comme un superset de C, il existe quelques différences, ce qui fait que certains codes C valides ne sont pas valides en C ++ ou se comportent différemment en C++. Des problèmes comme le C ++ définissant de nouveaux mots clés à savoir New & Class, qui sont utilisés comme identificateurs en C. Les codes C et C ++ peuvent être intermixés en déclarant tout code C qui doit être appelé à partir / utilisé en C ++ avec C Linkage et en le plaçant dans un bloc externe "C" / * C * /.
Développements dans les deux langues
Avec le temps, la normalisation est devenue de plus en plus importante en raison d'un grand nombre d'extensions et d'une bibliothèque aléatoire avec une popularité croissante de la langue et du manque de mise en œuvre précise des compilateurs selon les spécifications. L'un des objectifs du processus de normalisation C était de produire un superset de K&R C, incorporant de nombreuses caractéristiques non officielles introduites par la suite. Cependant, le comité des normes comprenait plusieurs nouvelles fonctionnalités telles que les prototypes de fonction, les pointeurs void, le support pour les jeux de caractères internationaux et les lieux et un préprocesseur plus compétent. La syntaxe des déclarations de paramètres a également été augmentée. Après les années 1970, C a remplacé Basic en tant que langue principale pour la programmation du microprocesseur et est devenu populaire avec sa collaboration avec les PC IBM. Pendant ce temps, Bjarne Stroustrup et d'autres à Bell Labs ont commencé à travailler sur la création du C ++, ce qui a ajouté des constructions de langage de programmation orientées objet à C. De plus, ANSI a formé un comité en 1983 appelé X3J11, pour établir une spécification standard de C et en 1989, la norme a été ratifiée comme ANSI X3.159-1989 "Langage de programmation C."C'est la version de C qui est souvent appelée ANSI C, standard C ou C89. C90, introduit en 1990, était AME comme C89 à moins de quelques changements mineurs. Alors que C ++ a évolué rapidement, C est resté statique jusqu'en 1995, lorsque l'amendement normatif 1 a créé une nouvelle norme qui a subi une révision supplémentaire, conduisant à la publication d'Iso 9899: 1999 en 1999. Cette norme est communément appelée "C99."Il a été adopté comme norme ANSI en mars 2000. Certaines des fonctions plus récentes sont mentionnées ci-dessous:
- Fonctions en ligne
- Capacité à déclarer des variables n'importe où, au lieu de seulement après une autre déclaration ou au début d'une déclaration composée
- De nouveaux types de données comme un INT long, des types entiers étendus facultatifs, un type de données booléen explicite et un type complexe pour désigner des nombres complexes
- Les longueurs du tableau peuvent être variables
- Commentaires en une ligne commençant par // pris en charge
- Fonctions de la bibliothèque comme snprintf
- De nouveaux fichiers d'en-tête, tels que stdbool.H et inttypes.H
- Fonctions mathématiques de type générique (tgmath.h)
- Amélioration du support pour IEEE Floating Point
- Initialiseurs désignés
- Literales composées
- Prise en charge des macros variadiques (macros d'arité variable)
C ++, tout en continuant à évoluer pour répondre aux exigences du futur, une nouvelle version appelée C ++ 0x indiquant qu'il devrait être publié avant 2010. Les indications suggèrent que C ++ continuera de capitaliser sur sa nature multi-paradigme et les améliorations notables peuvent être un support natif pour le filetage et les concepts, ce qui facilite le travail avec les templetes. Plus controversé, l'ajout de collecte de déchets est actuellement en discussion lourde. Un groupe appelé boost.Org, qui conseille le comité des normes C ++ sur les bonnes fonctionnalités et améliorations requises, travaille largement pour développer C ++ dans sa forme actuelle avec des capacités fonctionnelles et de métaprogrammation élargies.
Dans la conception et l'évolution de C ++ (1994), Bjarne Stroustrup décrit certaines règles qu'il a utilisées pour concevoir le C++. Connaître les règles aide à comprendre pourquoi C ++ est la façon dont il est. Beaucoup plus de détails peuvent être trouvés dans la conception et l'évolution de C++.
Influences
L'influence de C peut être attribuée à des œuvres comme awk, csh, c ++, c #, d, objective-c, simultc, bitc, java et javascript, limbo, perl, php, etc. Certaines des principales implémentations de C incluent Borland C, Watcom C, GCC et MSVC. C ++, à son crédit, a influencé d'autres œuvres comme D, C #, ADA 95, Aikido, Java & PHP.
Critiques de C vs. C++
Malgré sa popularité, C a été critiqué pour avoir des opérations souhaitables trop difficiles à réaliser et les opérations indésirables étant trop faciles à invoquer accidentellement, impliquant ainsi plus de compétences, d'expérience, d'effort et d'attention aux détails que d'autres langages de programmation pour l'utilisation sûre et efficace de la langue.
Lorsque les langues orientées objet sont devenues populaires, C ++ était une extension de C qui a fourni des capacités orientées objet avec C ++ à l'origine implémentée comme un pré-incessant - le code source a été traduit en C, puis compilé avec un compilateur C.
C ++ dérivé de C, il arrive également à hériter de la plupart des critiques orientées contre C. Mais comme la langue est en fait une composition de deux langues différentes, ainsi que la charge d'énormes programmes, finissent souvent par rendre la compilation énorme et inappropriée en termes de taille pure. Lorsque ce problème est essayé d'être évité, en désactivant certains des codes marginaux, il a de nouveau été critiqué pour avoir perdu plusieurs services publics importants. Le créateur de C ++ estime également que C ++ est justifié d'être un langage complexe car les exigences de programmation moderne ont également augmenté de manière énorme par rapport aux voies d'antan.