Pourquoi du C pur ?
Le
Pierre Maurette
Bonjour,
Je me décide à poser cette question certainement peu originale. Mais
pourtant, j'ai cherché, et pas de réponse satisfaisante (en 2003).
J'ai chargé la FAQ de fclc en format PDF, bravo pour le document, mais pas
vraiment trouvé ma réponse.
Rien non plus dans le doc ISO/IEC 9899:1999, pourtant, vu que cette dernière
normalisation du C est postérieure à la dernière du C++, je pensais que le
sujet aurait été évoqué.
Dans Google, pas trouvé le mot-clé qui tue en français ("c ou c++" donne des
résultats, mais dans le sens C/C++). En anglais, "C vs C++" OR "C++ vs C"
donne bien 2500 résultats, mais la question posée est généralement, dans des
références souvent anciennes, "Pourquoi passer au C++ ?", voire "Pourquoi la
POO ?". Questions pertinentes que j'ai connues, mais à l'époque de
l'apparition réelle de C++ sur le marché. Mais aujourd'hui, je dirais :
POO -> C++ (ou autre chose).
POO pur et dur -> autre chose
Pas POO -> pourquoi C et non C++ ? (c'est ma question).
Je vais tenter de préciser. Je ne connais par la pratique de la
programmation que les plateformes "grand-public", actuellement PC (x86) sous
divers OS et Apple.
Quelles peuvent être les raisons, pour de nouveaux projets, de se
contraindre à programmer en C ? La question ne porte pas sur l'utilisation
ou non des objets, voire de la STL, puisque leur utilisation peut être
évitée ou différée (dans le cadre d'une démarche pédagogique, ou
d'auto-apprentissage).
J'ai écrit "se contraindre". Les compilateurs que je connais permettent tous
de choisir le langage, entre un (ou plusieurs) C++ et un (ou plusieurs) C.
En d'autres termes, sur les plateformes que je pratique, l'acquisition d'un
compilateur C met souvent à votre disposition un compilateur C++, que vous
le vouliez ou non.
Existe-t-il des plateformes pour lesquelles l'offre est plus restrictive, et
ne propose pour un prix donné qu'un compilateur C ?
Bien entendu, la simple maintenance d'un développement existant en C impose
de pratiquer ce langage, La culture interdit d'ailleurs de l'ignorer.
Bien entendu, on ne programme pas que des ordinateurs, mais je connais un
peu l'informatique industrielle (ou automatisme) et justement il ne me
semble pas que ce domaine soit spécialement réfractaire au C++.
Certains parmi vous font-ils parfois du C, parfois du C++, et si oui, selon
quels critères et pour quelles raisons ? Simplement parce qu'il s'agit d'un
choix du client, peut-être ?
Plus vraisemblablement, il y a entre C et C++ (dégradé) une différence qui
m'aura échappé.
Voilà, je compte sur vous pour éclairer ma lanterne.
Cordialement,
Pierre
Je me décide à poser cette question certainement peu originale. Mais
pourtant, j'ai cherché, et pas de réponse satisfaisante (en 2003).
J'ai chargé la FAQ de fclc en format PDF, bravo pour le document, mais pas
vraiment trouvé ma réponse.
Rien non plus dans le doc ISO/IEC 9899:1999, pourtant, vu que cette dernière
normalisation du C est postérieure à la dernière du C++, je pensais que le
sujet aurait été évoqué.
Dans Google, pas trouvé le mot-clé qui tue en français ("c ou c++" donne des
résultats, mais dans le sens C/C++). En anglais, "C vs C++" OR "C++ vs C"
donne bien 2500 résultats, mais la question posée est généralement, dans des
références souvent anciennes, "Pourquoi passer au C++ ?", voire "Pourquoi la
POO ?". Questions pertinentes que j'ai connues, mais à l'époque de
l'apparition réelle de C++ sur le marché. Mais aujourd'hui, je dirais :
POO -> C++ (ou autre chose).
POO pur et dur -> autre chose
Pas POO -> pourquoi C et non C++ ? (c'est ma question).
Je vais tenter de préciser. Je ne connais par la pratique de la
programmation que les plateformes "grand-public", actuellement PC (x86) sous
divers OS et Apple.
Quelles peuvent être les raisons, pour de nouveaux projets, de se
contraindre à programmer en C ? La question ne porte pas sur l'utilisation
ou non des objets, voire de la STL, puisque leur utilisation peut être
évitée ou différée (dans le cadre d'une démarche pédagogique, ou
d'auto-apprentissage).
J'ai écrit "se contraindre". Les compilateurs que je connais permettent tous
de choisir le langage, entre un (ou plusieurs) C++ et un (ou plusieurs) C.
En d'autres termes, sur les plateformes que je pratique, l'acquisition d'un
compilateur C met souvent à votre disposition un compilateur C++, que vous
le vouliez ou non.
Existe-t-il des plateformes pour lesquelles l'offre est plus restrictive, et
ne propose pour un prix donné qu'un compilateur C ?
Bien entendu, la simple maintenance d'un développement existant en C impose
de pratiquer ce langage, La culture interdit d'ailleurs de l'ignorer.
Bien entendu, on ne programme pas que des ordinateurs, mais je connais un
peu l'informatique industrielle (ou automatisme) et justement il ne me
semble pas que ce domaine soit spécialement réfractaire au C++.
Certains parmi vous font-ils parfois du C, parfois du C++, et si oui, selon
quels critères et pour quelles raisons ? Simplement parce qu'il s'agit d'un
choix du client, peut-être ?
Plus vraisemblablement, il y a entre C et C++ (dégradé) une différence qui
m'aura échappé.
Voilà, je compte sur vous pour éclairer ma lanterne.
Cordialement,
Pierre

Poser une question


Je programme des micro-controleurs (systèmes embarqués) et il n'y a bien
souvent que des compilateurs C de disponibles ;ce qui est logique, le C
étant le langage les plus adapté pour ce type d'application (contraintes de
taille - quelques 10aines de k de code - et contraintes de vitesse
d'exécution - avec un bon compilateur bien optimisé, on aurait pas fait
mieux en écrivant directement en assembleur)
Pour des applications "bas niveau" style drivers, controle de processus,...
il est vrai que ça pourrait être faisable en c++ mais un niveau
d'abstraction élevé est inutile pour ce type d'applications et ne fait que
complexifier et alourdir l'application.
Tout cela n'est évidemment qu'une question de gouts, il y a des gens qui
programment des micros en C++ et d'autres des interfaces graphiques en C
mais je trouve que chaque type d'application a ses outils spécifiques avec
leurs avantages et leurs inconvénients.
Honnêtement, et à titre tout à fait personnel, si ce n'est pas pour
utiliser les possibilités de programmation générique (templates) ou OO,
je ne vois guère l'intérêt d'utiliser C++ plutôt que C.
Bruno
D'abord parce que les compilateur C existent sur quasiment toutes les
plateformes contrairement au C++.
Ensuite les compilateur C++ implemente plus ou moins bien la norme
contrairement au C, plus "simple" et qui est relativement bien
implémenté par les concepteurs de compilateur.
Enfin les compilateurs C++ modifie le nom des fonctions (le name
mangling ou decoration) de facon a permettre la surchage (plusieurs
fonctions avec le meme nom mais des arguments différents). Or jusqu'a
une periode recente chaque compilateur avait sa propre facon de modifier
le nom. Il en resultait qu'une librairie crée par un compilateur ne
pouvait etre utilisée que par un programme compilé par le meme compilateur.
Ca fait au moins trois bonnes raisons, mais il y en a certainement d'autres.
A+
LD
Sans oublier le mauvais support de la norme (et encore pour un moment), la
gestion des exceptions, le layout binaire des objets, la portabilite de la STL,
la stabilite des compilateurs... Autant d'incompatibilites entre compilateurs,
voir version d'un meme compilateur. Il va falloir encore quelques annees avant
d'atteindre la stabilite du C89, meme si beaucoup d'efforts sont fait de ce cote.
a+, ld.
--
[ Laurent Deniau -- Scientific Computing & Data Analysis ]
[ CERN -- European Center for Nuclear Research ]
[ - http://cern.ch/Laurent.Deniau ]
[ -- One becomes old when dreams become regrets -- ]
J'ai utilise' le C++ de 1989 (zortech 1.0 :-) a 1999. Je continue de temps en
temps pour ne pas perdre contact car sur le plan des concepts, c'est un language
tres interessant. J'ai egalement regarde Objective-C, Eiffel et Java (et
beaucoup d'autres pour la culture) mais pour l'instant aucun ne m'a seduit plus
que le C et le C++.
Mais le C++ est deux (voir trois) ordres de magnitude plus complexe que le C. Il
est tres facile de faire n'importe quoi en C++ et de ne plus s'y retrouver. Et
c'est encore plus difficile de le faire comprendre a ses collaborateurs (surtout
s'ils manquent d'experience) lorsque vous mixez plusieurs facettes du C++
(heritage multiple, heritage virtuel, methodes virtuelles, membres static,
template, traits, template expressions, exceptions).
Depuis je suis revenu au C que j'utilise presque comme Java (mais je gere la
memoire :-). Il est en effet tout a faire possible de faire de la POO
(technique) en C (language) et j'y ai meme trouve des avantages. C'est
effectivement legerement plus lourd de creer une hierarchie d'objets en C
(quoique avec de bonnes macros)... Mais:
o cela incite a reflechir a la qualite de l'interface a deux fois, ce qui de
mon point de vu est le point le plus important dans toute programmation.
Mon principe est qu'en lisant une fois une interface (un header) on devrait
pouvoir en utiliser les services et les objets sans trop se poser de question.
Et le cas echeant, lever les questions persistantes en lisant l'implementation
(selon moi ca doit rester
Or en C++ (ou autre language OO) on voit rapidement le nombre de classes
croitre exponentiellement ce qui devient inutilisable, incomprehensible ou
impossible a maintenir (pour parodier une phase connue, "trop objet tue
l'objet"). Et l'utilisation intensive des templates n'aide pas a la
comprehension (qui serait capable d'utiliser la STL en lisant les headers une
ou deux fois? Et encore il lui faudra bien quelques semaines vu la taille du
code).
o les problemes sont explicites (par exemple levees d'exceptions dans les
constructeurs, ordre de construction/destruction des objets et de leurs
membres). Un source C++ est souvent beaucoup plus complique' a comprendre
qu'un source C car de nombreuses choses (pas necessairement accessible)
sont implicites.
o on controle (presque) tout, ce qui fait que le C est souvent considere comme
un super assembleur. Y compris le modele objet quand on fait de la POO, avec
la possibilite de l'etendre a souhait (par exemple l'introspection, les
objects factory, etc...).
o on controle aussi d'avantage le layout binaire ce qui permet plus facilement
de s'interfacer avec d'autres bibliotheques sans (trop de) surprise. Certains
points du C++ ne sont pas encore resolu et demande parfois un "collaboration"
avec l'OS (exemple: gestion de l'export des templates).
o le temps de developement est (pour moi mais je l'ai observe ailleurs) deux
fois plus rapide en C qu'en C++, en partie parce que j'utilise le meilleur des
deux mondes :-) POO sans les contraintes fortes qui vont avec (C++ en
particulier).
o il est plus simple de resoudre des problemes "non-standard" en C qu'en C++. Il
suffit de voir le niveau plutot basique des questions sur fclc par rapport aux
questions sur fclc++. Cela montre clairement que le C++ est plus difficile a
maitriser et qu'on devient plus rapidement "autonome" en C. Cela compte
beaucoup quand l'equipe de development change souvent.
o pour finir, je n'ai besoin que d'un livre pour programmer en C (et encore, on
trouve beaucoup dans les man), alors que j'ai besoin de 2 a 5 livres + une
norme pour programmer en C++. Je parle de programmer proprement, pas des bouts
de code ou des petits programmes de-ci-de-la....
Il y a aussi plein d'autres raisons plus subjectives.
a+, ld.
--
[ Laurent Deniau -- Scientific Computing & Data Analysis ]
[ CERN -- European Center for Nuclear Research ]
[ - http://cern.ch/Laurent.Deniau ]
[ -- One becomes old when dreams become regrets -- ]