FRFAM.COM >> Famille >> Technologie &Innovation >> Informatique

Caractéristiques de la programmation C qui la rendent unique (et meilleure)

Le langage de programmation C est la mère de tous les langages de programmation modernes. Presque tous les langages utilisés aujourd'hui incluent plusieurs fonctionnalités apparues pour la première fois dans le langage C. Il a été largement utilisé pour écrire des logiciels pour les plus petits micro-ordinateurs embarqués sur les plus grands ordinateurs centraux et superordinateurs.

Les applications écrites en C couvrent une grande variété de logiciels système, de logiciels de bureau, de logiciels d'entreprise, de bases de données, etc. Vous feriez très bien de commencer une carrière en programmation avec une connaissance des bases du C.

Une brève histoire de C

Le développement du langage C est très étroitement associé à Unix. Il a été développé vers 1972, avec d'autres ajouts effectués au cours des années suivantes.

Avant le développement de C, le système d'exploitation Unix a été développé pour l'ordinateur PDP-7 en utilisant son langage d'assemblage. Plus tard, un compilateur pour C a été construit sur cette plate-forme, utilisant à nouveau le langage d'assemblage. A cette époque, C a été conçu pour faciliter le développement d'Unix lui-même. À l'aide de ce compilateur, Unix a été entièrement réécrit en C pour l'ordinateur PDP-11. Et encore une fois, le compilateur du langage C a été réécrit en C (aidé, bien sûr, par l'excellent lex et yacc outils), complétant ainsi le processus d'amorçage C/Unix.

La principale raison pour laquelle Unix a été réécrit en C était la portabilité. Étant donné que les langages d'assemblage des différentes architectures de processeur sont différents, le portage du système d'exploitation Unix sur chacun aurait représenté un effort considérable. En développant un langage système comme C, et la réécriture du système d'exploitation Unix en C, cet effort a été réduit de plusieurs ordres de grandeur.

Une fois le langage développé, il a été reconnu qu'il pouvait être utilisé pour écrire bien plus que des logiciels système. Et ainsi, C a commencé à être utilisé pour écrire des logiciels tels que des serveurs de fichiers, des serveurs de bases de données, des piles réseau, des logiciels de bureau, (et plus tard) des serveurs Web, etc.

Caractéristiques de la programmation C qui la rendent unique (et meilleure)

En 1978, Brian Kernighan et Dennis Ritchie ont publié le livre The C Programming Language . Ce livre a servi de spécification du langage C informelle pendant de nombreuses années jusqu'en 1989, date à laquelle C a été officiellement normalisé par l'ANSI. La dernière version de C est C11, publiée en 2011.

Examinons maintenant certaines fonctionnalités de C qui le rendent unique.

Au fur et à mesure que des logiciels plus complexes étaient développés en C, il a été reconnu que des concepts orientés objet, notamment l'encapsulation, le polymorphisme, etc., aideraient à gérer la complexité. Cela a conduit au développement de C++ en tant que sur-ensemble de C.

C++ a été construit en ajoutant certaines fonctionnalités pour l'écriture de logiciels orientés objet, tout en maintenant la compatibilité avec C. Il a été développé avec l'idée d'amélioration progressive -- apporter des modifications compatibles au langage C afin que les modules C et C++ puissent être combinés dans le même programme et compilés avec le même compilateur. Cela a permis aux anciens modules basés sur C d'être réutilisés avec des modifications minimes dans un programme plus vaste écrit à l'aide de concepts orientés objet.

Un programme C peut, en théorie, être compilé par un compilateur C++ sans nécessiter de modifications. En pratique, cependant, une vérification de type plus stricte imposée par C++ entraîne des erreurs, nécessitant certaines modifications du code.

Petit nombre de mots clés

Le langage C a été un petit langage malgré sa puissance. En effet, il ne déclare que 32 mots comme mots clés ayant une signification spécifique. En revanche, C++ déclare 82 mots-clés, Java a 50 mots-clés réservés et javascript en a 63. Et COBOL déclare 357 mots-clés. Imaginez le casse-tête de devoir mémoriser et éviter un si grand nombre de mots-clés !

Aucun type de chaîne explicite

Contrairement à la plupart des autres langages modernes tels que Java, C++ et JavaScript, C ne fournit pas de type distinct pour les chaînes. Une chaîne est considérée comme un tableau de caractères terminé par un 0 caractère (noté "\0"). La longueur de la chaîne est indiquée par une convention :le nombre de caractères jusqu'au 0 caractère . Vous êtes libre de l'ignorer et de compter ou de stocker après le "\0". Cette absence de type de chaîne approprié et la convention ont entraîné d'innombrables bogues au fil des ans, connus sous le nom de débordement de mémoire tampon .

En fait, le premier ver à avoir atteint Internet, le Morris Internet Worm, était le résultat d'un tel bogue dans un élément crucial du logiciel système connu sous le nom de démon finger. .

Voici un exemple d'un tel bogue. Cela illustre à quel point il est facile d'introduire de tels bogues dans un programme. Le programme se compile bien, mais plante à cause du débordement de la mémoire tampon.

# inclure  
principale()
{
char *buf ="bonjour le monde" ;
buf[12] ='un';
printf("%s
", buf);
}

En revanche, la plupart des langages modernes fournissent un type de chaîne explicite qui rend de telles manigances impossibles. Même C++, qui compile bien le code ci-dessus, fournit un std::string explicite saisir.

Manipulation du pointeur

Un pointeur est une référence à un emplacement mémoire. C est complètement flexible lorsqu'il s'agit de lire et d'écrire des emplacements de mémoire arbitraires. Cette flexibilité a un coût élevé et a été la cause de nombreux bogues dans l'ensemble du spectre logiciel. Les bogues les plus notables et affectant l'ensemble d'Internet incluent ces bogues dans les serveurs Web, les serveurs de messagerie et les serveurs FTP. Même aujourd'hui, il y a parfois des reportages sur des bogues causés par le référencement et la mise à jour d'emplacements de mémoire non valides.

Caractéristiques de la programmation C qui la rendent unique (et meilleure)

Le tristement célèbre SSL HeartBleed Le bogue de sécurité découvert en 2014 était le résultat d'une mauvaise gestion des emplacements des pointeurs et illustre l'importance cruciale d'une bonne gestion des pointeurs en C.

Même les erreurs occasionnelles de BSOD ("écran bleu de la mort") que l'on voit sur les systèmes Windows sont également probablement causées par une mauvaise gestion du pointeur.

Les langages autres que C++ ne permettent pas la manipulation des pointeurs et ne sont donc pas vulnérables à cette classe de bogues.

Les tableaux et les pointeurs sont interchangeables

En C, les références de tableau et les pointeurs sont interchangeables. Le langage permet l'utilisation d'une référence de tableau lorsqu'un pointeur est requis, et vice versa. Bien que cela permette une manipulation puissante, cela a également entraîné de nombreux bogues infâmes.

Large utilisation des macros "define"

Les macros sont utilisées pour substituer un nom à une extension différente. Ils peuvent être utilisés pour modifier la définition d'un nom au moment de la compilation ou pour substituer une extension plus longue à un nom simple. Le système de macro C prend en charge ifdef conditionnels qui permettent la compilation conditionnelle. Il s'agit d'une façon dont le logiciel est porté sur différentes architectures et systèmes d'exploitation. Les noms génériques sont définis et remplacés au moment de la compilation par différentes extensions pour différentes conditions.

Il est également possible d'inclure ou d'éliminer la compilation de sections entières de code à l'aide de ces macros.

Ils sont obsolètes mais disponibles en C++. D'autres langages tels que Java, JavaScript, Python, etc. ne fournissent pas une fonctionnalité similaire.

Modules encapsulés dans des fichiers

C n'a pas le concept d'une classe, et donc ne prend pas en charge la notion de visibilité séparée publique, privée et protégée. La seule encapsulation fournie par C est celle des fichiers. Les fonctions, les variables globales et les types définis dans un fichier source sont visibles dans ce fichier uniquement, sauf si les noms sont exportés. Les mots-clés statiques et externe sont fournis dans le but de contrôler la visibilité des noms de variables et de fonctions.

En revanche, d'autres langages tels que C++, Java et Python prennent généralement en charge les classes et l'encapsulation qui va avec les classes.

Bibliothèques externes

Outre les constructions de langage de base, des fonctionnalités plus complexes en C sont déléguées à des bibliothèques externes. La manipulation de chaînes, les mathématiques, les entrées-sorties, la mise en réseau, etc. sont toutes fournies par des bibliothèques externes. En revanche, les autres langages sont généralement livrés avec une bibliothèque bien fournie de modules avec le langage lui-même.

Et cela couvre certaines caractéristiques de base du langage C, en particulier celles qui le distinguent des autres langages.

Avez-vous travaillé avec C ? Avez-vous aimé ou auriez-vous préféré travailler avec une autre langue ? Veuillez expliquer dans les commentaires ci-dessous.


[]