Et le C dans l'affaire ?

10/11/2003

Par Geronimo (Autres articles)
 

Le langage C est-il obsolète face aux nouveaux langages qui se disputent actuellement le marché ? Quelles sont les raisons qui peuvent pousser à programmer en C.


Introduction
Syntaxe
Compacité
Compilation
Un langage universel
Apprentissage
Conclusion


Introduction


Java vs. C#. Java face à DotNet. C++ vs. Java ... tous ces débâts forts intéressants ne semblent plus laisser de place au C. Le C est un vieux langage qui n'est ni orienté objet, ni managé, qui a une syntaxe peu évidente et qui n'est pas trés sécurisé (les pointeurs par exemple permettent d'écrire facilement là où il ne faut pas).


Syntaxe


Un des avantages du C est sa syntaxe, bien que compliquée, qui est trés proche de ce qui se passe dans l'ordinateur. Lorsque vous écrivez un programme en C, vous avez une idée plutôt précise de la maniére dont il va étre retranscrit en assembleur, et donc en langage machine. En C++, les compilateurs sont plus compliqués à élaborer car la syntaxe ne "colle" pas au code assembleur. En Java, encore moins (1). Interrogé sur la raison de la conservation du C dans le noyau Linux, Linus Torvalds répondait que cela permettait de savoir exactement ce que l'on faisait, et d'éviter les bugs que pourraient introduire des compilateurs plus élaborés, mais moins fiables ; bien sér, au niveau du noyau Linux, il faut comprendre qu'aucun bug, méme minime, ne doit passer puisqu'on est à la base du systéme lui-méme.

De ce fait, le langage C produit des logiciels très performants et est donc le langage idéal pour la programmation systême.


Compacité


Contrairement aux autres langages, un programme écrit en C génère en général un exécutable compact. Comparez ces deux programmes qui font exactement la même chose :

#include <stdio.h>

int main(void)
{
	printf("Hello World !\n");
	return 0;
}
#include <iostream>

int main()
{
	cout << "Hello World" << endl;
	return 0;
}
Le premier, écrit en C, fait 10 Ko lorsqu'il est compilé (gcc, Linux). Le second, compilé, prend environ 12 Ko (g++, Linux). Il est vrai que la différence n'est pas remarquable ; sauf qu'ici, nous avons compilé deux codes de quelques ridicules petites lignes. Imaginez sur de grands projets (je ne parle pas de la facilité d'écriture du code, où le C++ l'emporte largement et sans conteste sur de grands projets !) Pour donner un exemple concret, la calculatrice Ti89 peut être programmée en C grace à une version adaptée de gcc. En revanche, le C++ n'a pas été envisagé pour des raison de compacité de l'exécutable produit. De méme tous les microcontroleurs etc. s'ils ne sont pas programmés en assembleur se verront généralement programmé en C.


Compilation


Enfin, par rapport à un langage comme le C++, la compilation d'un programme écrit en langage C est très rapide. Voici ci-dessous les résultats de tests effectués par Anomaly, modérateur C et C++ :

Machine de test : Cyrix M2-266, 128 Mo RAM, Linux Slackware 9.1; Tests avec compilateur mis en cache (exécuté une fois auparavant)

Hello World C++ (gcc 3.2.3) : 11 secondes
Hello World C++ (gcc 2.95.3) : 5 secondes
Hello World C (gcc 3.2.3) : 1 seconde
Hello World C (gcc 2.95.3) : moins d'une demi-seconde

Là encore, la différence est déjà importante sur de ridicules petits projets de quelques lignes. Que devient-elle sur de gros projets de milliers de lignes (voire de millions ...) ?


Un langage universel


D'énormes quantités de bibliothéques de fonctions ont été écrites pour le C. Vous pouvez a peu près trouver tout ce que vous cherchez. Cela rend le C extrémement extensible. De plus, ce langage est extrémement répandu et vous trouverez trés facilement de l'aide sur celui-ci (forums, sites, newsgroups ...). Enfin, le C a un nombre réduit de standards (ANSI et K&R) qui sont très bien supportés par les différents compilateurs.


Apprentissage


Enfin si vous souhaitez apprendre un langage, le C pourrait être votre choix pour les raisons suivantes :

  • Documentation en surnombre
  • L'attention qu'il demande vous forcera à la rigueur. Et vous aurez toujours besoin de rigueur en programmation.
  • Il est facile, avec un bon livre/tutoriel, d'évoluer du C vers le C++. En tous cas, la syntaxe est connue, et le fonctionnement des pointeurs qui n'est pas des plus facile (même s'il contribue à la puissance du C) est le même en C et C++.
  • Enfin, même si certains diront que c'est subjectif, le C est un beau langage.
  • Le nombre de concepts à apprendre et à maitriser est beaucoup moins important qu'en C++. Vous pouvez connaître tout le C. Connaitre tout le C++ devient plus dur : Bjarne Stroustrup reconnait dans son livre que même lui ne connaît pas par coeur toutes les ficelles mises à sa disposition par son propre langage !


Conclusion


Si jamais vous souhaitez vous intéresser à la programmation système, en particulier sous Linux, le C est alors un langage incontournable et vous vous devez de l'apprendre. Si votre but principal est la conception d'applications, un langage de plus haut niveau comme le C++, Java, Delphi etc. vous facilitera bien plus la tâche et vous permettra de faire des économies de temps considérables, car il ne faut pas oublier que le C demande plus d'attention que ces autres langages.

Pour conclure, je tiens à insister sur le fait que cet article n'est en aucun cas une condamnation des autres langages (aurais-je écrit la FAQ C++Builder si je n'appréciais pas le C++ ?), mais il faut bien reconnaitre que le C n'est pas un langage obsolète et possède des qualités que les autres langages n'ont pas.


(1)Il ne faut pas le voir comme une critique, le Java n'a pas du tout été conçu dans la méme optique que le C.

Tous droits réservés. Geronimo 2003