Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Standards C

16 réponses
Avatar
Dewi
Bonjour,
Cela ne fait que très peu de temps que je fais du C, alors même si ma
questions vous semble idiote, pouvez m'aider à comprendre, ou me donner
quelques liens en rapport avec les standards du C.
En effet j'avais l'intention d'acheter le livre : "Le langage C
Norme ANSI" de Brian W. Kernighan et Dennis M. Ritchie (je ne sais pas
si c'est un bon livre...), et j'ai vu que l'on parle de norme et de
standard C, alors je me suis rendu sur la FAQ de développez.com. Il est
écrit :
"Le C est normalisé par l'ISO, la norme du C est donc disponible à
l'achat sur le site de l'ISO (C90, C99) ainsi que sur le site de l'ANSI
(C89). Toutefois son prix reste relativement élevé."

Alors voilà, je me demande ce que cela veut dire, j'ai lu que le livre
cité plus haut utilisait la norme C90. Mais puisque c'est ISO C90, ISO
C99 et ANSI C89, alors pourquoi le livre traite de l'ANSI C90 ? Bref, je
m'embrouille un peu avec tout ça... Je souhaiterais donc obtenir plus
d'information en rapport avec les normes et quels sont leurs différences .

Merci d'avance !
Cordialement,
David

10 réponses

1 2
Avatar
Jean-Marc Bourguet
Dewi writes:

Bonjour,
Cela ne fait que très peu de temps que je fais du C, alors même si ma
questions vous semble idiote, pouvez m'aider à comprendre, ou me donner
quelques liens en rapport avec les standards du C.
En effet j'avais l'intention d'acheter le livre : "Le langage C
Norme ANSI" de Brian W. Kernighan et Dennis M. Ritchie (je ne sais pas si
c'est un bon livre...), et j'ai vu que l'on parle de norme et de standard
"Le C est normalisé par l'ISO, la norme du C est donc disponible à l'achat
sur le site de l'ISO (C90, C99) ainsi que sur le site de l'ANSI
(C89). Toutefois son prix reste relativement élevé."

Alors voilà, je me demande ce que cela veut dire, j'ai lu que le livre cité
plus haut utilisait la norme C90. Mais puisque c'est ISO C90, ISO C99 et
ANSI C89, alors pourquoi le livre traite de l'ANSI C90 ? Bref, je
m'embrouille un peu avec tout ça... Je souhaiterais donc obtenir plus
d'information en rapport avec les normes et quels sont leurs différences .


Il n'y a pas de différences techniques entre ANSI C89 et ISO C90 (la
normalisation est le fait de l'ANSI et a été reprise telle quelle par
l'ISO). ISO C99 décrit une évolution du langage (normalisée par l'ISO avec
l'ANSI comme participant, de même que l'AFNOR, BSI et d'autres organismes).

le K&R est un bon livre -- ce sont les concepteurs du C et ils ne sont pas
dénués en prime de talent pédagogique -- mais il ne s'adresse plutôt à des
personnes ayant déjà une certaine expérience de la programmation. Il a été
mis à jours pour décrire le langage normalisé en 89/90 mais pas après la
normalisation de 99.

Bien qu'elle soit vieille de bientôt 10 ans, la norme C99 est rarement
implémentée dans sa totalité et beaucoup évitent de ce fait ses
possibilités. Le fait que le K&R ne décrive pas ce qu'elle apporte n'est
donc pas un problème important, surtout quand on considère que le C est de
plus en plus un langage se limitant à des niches où le C99 n'est pas
pratiquement utilisable.

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Sylvain
Dewi wrote on 06/03/2008 22:18:
Bonjour,
Cela ne fait que très peu de temps que je fais du C, alors même si ma
questions vous semble idiote, pouvez m'aider à comprendre, ou me donner
quelques liens en rapport avec les standards du C.
En effet j'avais l'intention d'acheter le livre : "Le langage C
Norme ANSI" de Brian W. Kernighan et Dennis M. Ritchie (je ne sais pas
si c'est un bon livre...), et j'ai vu que l'on parle de norme et de
standard C, alors je me suis rendu sur la FAQ de développez.com. Il est
"Le C est normalisé par l'ISO, la norme du C est donc disponible à
l'achat sur le site de l'ISO (C90, C99) ainsi que sur le site de l'ANSI
(C89). Toutefois son prix reste relativement élevé."

Alors voilà, je me demande ce que cela veut dire, j'ai lu que le livre
cité plus haut utilisait la norme C90. Mais puisque c'est ISO C90, ISO
C99 et ANSI C89, alors pourquoi le livre traite de l'ANSI C90 ? Bref, je
m'embrouille un peu avec tout ça... Je souhaiterais donc obtenir plus
d'information en rapport avec les normes et quels sont leurs différences .


le C est standardisé depuis "relativement peu" de temps.
dit autrement, il a existé avant d'être proposé à l'ISO et l'ANSI.
ainsi "Le langage C" de K&R est sorti avant le dépot de la norme,
après celle-ci une réécriture a donnée "Le Langage C, norme ANSI",
la première édition était contemporaine de la norme émisse en 1990
(dite C90) et donc traite de celle-ci.

les normes évoluant, il existe une évolution déposée en 1999 (dite
C99) qui doit être reprise dans les rééditions 2000 ou 2004.
vous la trouverez encore dans d'autres ouvrages tels "Méthodologie
de la programmation en C - Norme C99".


toutefois, si votre besoin de documentation vise à couvrir une phase
d'apprentissage, ne vous focalisez pas sur la norme seule, évitez
bien sur les bouquins qui ne se réfèreraient à aucune version de cette
norme, mais ne cherchez pas non plus celui qui la recopierait le plus.

laissez la norme pour plus tard, quand vous aurez besoin d'étudier une
sémantique très pointue et encore envie de la citer pour la citer, à ce
moment vous pourrez acheter la chose à l'ISO (notez que les drafts qui
n'ont pas le tampon ISO / CEI peuvent être échangés gratuitement).

Sylvain.

Avatar
Jean-Marc Bourguet
Sylvain writes:

les normes évoluant, il existe une évolution déposée en 1999 (dite
C99) qui doit être reprise dans les rééditions 2000 ou 2004.


Non. Le livre n'a pas été mis à jour sur ces points.

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Dewi
Merci pour vos réponses !

Il n'y a pas de différences techniques entre ANSI C89 et ISO C90 (la
normalisation est le fait de l'ANSI et a été reprise telle quelle par
l'ISO). ISO C99 décrit une évolution du langage (normalisée par l'ISO avec
l'ANSI comme participant, de même que l'AFNOR, BSI et d'autres organismes).

le K&R est un bon livre -- ce sont les concepteurs du C et ils ne sont pas
dénués en prime de talent pédagogique -- mais il ne s'adresse plutôt à des
personnes ayant déjà une certaine expérience de la programmation. Il a été
mis à jours pour décrire le langage normalisé en 89/90 mais pas après la
normalisation de 99.


Je débute en C (comme je vous l'ai dit), et je viens tout juste de
terminer le livre de C.Delannoy. Je pense avoir à peu près compris
l'essentiel, et on m'a conseillé de lire ce livre afin de prendre les
bonnes habitudes et en apprendre plus sur le langage. Je ne sais pas
exactement ce que vous entendez par "une certaine expérience". Si je
n'ai pas choisi le bon livre, dites le moi.

Bien qu'elle soit vieille de bientôt 10 ans, la norme C99 est rarement
implémentée dans sa totalité et beaucoup évitent de ce fait ses
possibilités. Le fait que le K&R ne décrive pas ce qu'elle apporte n'est
donc pas un problème important, surtout quand on considère que le C est de
plus en plus un langage se limitant à des niches où le C99 n'est pas
pratiquement utilisable.


Pour récapituler (si j'ai bien compris) les normes ANSI C89 et ISO C90
sont les mêmes et la norme C99 est mauvaise. C'est ça ?
Mais qu'apporte réellement la C99 par rapport à la C90 ? Ce que je me
demande c'est est-ce ça vaut vraiment le coup d'apprendre la C90 alors
qu'une version plus récente de cette norme existe ? Qu'est-ce que ça
change, c'est simplement des ajouts ou alors certaines choses ont changés ?

Je sais que ça fait beaucoup de questions, et que je ne devrais pas
m'occuper de tout ça à mon niveau, mais je suis plutôt curieux. Désolé.

(notez que les drafts qui
n'ont pas le tampon ISO / CEI peuvent être échangés gratuitement).
J'ai réussi à me les procurer, mais c'est plutôt compliqué...


Cordialement.
David

Avatar
Sylvain
Dewi wrote on 07/03/2008 00:29:

Je débute en C (comme je vous l'ai dit), et je viens tout juste de
terminer le livre de C.Delannoy. Je pense avoir à peu près compris
l'essentiel, et on m'a conseillé de lire ce livre afin de prendre les
bonnes habitudes et en apprendre plus sur le langage. Je ne sais pas
exactement ce que vous entendez par "une certaine expérience". Si je
n'ai pas choisi le bon livre, dites le moi.


on peux (et c'est souhaitable) prendre de bonne habitude via de
nombreuses lectures possibles, pas forcément la norme brute.
la norme est la loi, aussi passionnante pour un {p|j}uriste
qu'ennuyeuse pour un simple pratiquant.

Pour récapituler (si j'ai bien compris) les normes ANSI C89 et ISO C90
sont les mêmes et la norme C99 est mauvaise. C'est ça ?


ISO est l'organisme le plus global ('organisation internationale de
normalisation') aussi connu comme CEI (commission électrotechnique
internationale).
ANSI est l'organisme américain (american national standards institute)

il est très fréquent de rencontrer une même specification enregistrée
dans ces 2 bureaux avec parfois 3 virgules de différences parfois
aucune diff.

pour le C, il a d'abord (en 89) été déposé aux USA auprès de l'ANSI
puis - pour le généraliser un peu plus, et au delà sans troller
inutilement le choix du dépot est souvent potilique - à l'ISO en 90.
ces 2 normes ANSI C89 et ISO C90 sont un exemple de specs identiques
à quelques virgules et un titre près.

vins ensuite 99, comme indiqué, elle reprend tout le travail de C90
et la complète par ce qui a été choisi d'ajouter depuis 90.
ni l'une, ni l'autre n'est "mauvaise" en substance, une norme ne
se juge pas en terme de qualité intrinsèque (à la limite elle peut
être utile ou non).
les éléments bons ou mauvais sont les élements (extérieurs) à la
norme qui se déclarent conformes à elle; si un compilo déclare
être conforme C99 mais n'implémente que C90 (quel que soit le
différentiel, soit qu'il y a un truc qui manque, ou qui soit en
trop, ou qui soit trop ou pas assez permissif, etc) alors ce
compilo là est "mauvais" - pas la norme.


Mais qu'apporte réellement la C99 par rapport à la C90 ? Ce que je me
demande c'est est-ce ça vaut vraiment le coup d'apprendre la C90 alors
qu'une version plus récente de cette norme existe ? Qu'est-ce que ça
change, c'est simplement des ajouts ou alors certaines choses ont
changés ?


c'est une meilleure question - la "qualité perçue" d'une norme est
son adéquation par rapport à son besoin propre.
ici encore, C90 n'est pas l'anti-thèse de C99, 99% de ce que vous
apprendrez via C90 reste vrai avec des outils C99; le différentiel
apporté par C99 qui vous manquera touchera principalement les
dernières librairies incluses dans la version "dite standard" (ie
normée) du langage.

d'autres que moi les listeront le cas échéant.

(notez que les drafts qui
n'ont pas le tampon ISO / CEI peuvent être échangés gratuitement).
J'ai réussi à me les procurer, mais c'est plutôt compliqué...



compliqué à lire ou à se les procurer ?
pour le premier, c'est une norme en effet ;)

Sylvain.


Avatar
Eric Levenez
Le 07/03/08 00:29, dans <47d07dff$0$15959$, « Dewi »
a écrit :

Pour récapituler (si j'ai bien compris) les normes ANSI C89 et ISO C90
sont les mêmes et la norme C99 est mauvaise. C'est ça ?


Sylvain t'a répondu sur ce point. Et non, C99 n'est pas une mauvaise norme
bien au contraire. J'utilise des particularités C99 couramment comme par
exemple le calcul sur les nombres complexes.

Apprend le C90 avec un bouquin et sur un ordinateur, puis quand cela sera
fait, il te restera 1 % de chemin à faire pour passer au C99.

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.

Avatar
Jean-Marc Bourguet
Dewi writes:

Merci pour vos réponses !

Il n'y a pas de différences techniques entre ANSI C89 et ISO C90 (la
normalisation est le fait de l'ANSI et a été reprise telle quelle par
l'ISO). ISO C99 décrit une évolution du langage (normalisée par l'ISO avec
l'ANSI comme participant, de même que l'AFNOR, BSI et d'autres organismes).
le K&R est un bon livre -- ce sont les concepteurs du C et ils ne sont pas
dénués en prime de talent pédagogique -- mais il ne s'adresse plutôt à des
personnes ayant déjà une certaine expérience de la programmation. Il a été
mis à jours pour décrire le langage normalisé en 89/90 mais pas après la
normalisation de 99.


Je débute en C (comme je vous l'ai dit), et je viens tout juste de terminer
le livre de C.Delannoy.


Je ne l'ai pas lu, mais la reputation de l'auteur est de combiner un
certain don pedagogique avec des approximations nuisibles au domaine qu'il
pretend enseigner.

Je pense avoir à peu près compris l'essentiel, et on m'a conseillé de
lire ce livre afin de prendre les bonnes habitudes et en apprendre plus
sur le langage. Je ne sais pas exactement ce que vous entendez par "une
certaine expérience". Si je n'ai pas choisi le bon livre, dites le moi.


Le K&R est un bon livre pour apprendre le langage C. Je ne suis pas sur
qu'il soit bon pour apprendre la programmation -- ce qui est quelque chose
de plus long et demande plus que de connaitre un langage.

Bien qu'elle soit vieille de bientôt 10 ans, la norme C99 est rarement
implémentée dans sa totalité et beaucoup évitent de ce fait ses
possibilités. Le fait que le K&R ne décrive pas ce qu'elle apporte n'est
donc pas un problème important, surtout quand on considère que le C est de
plus en plus un langage se limitant à des niches où le C99 n'est pas
pratiquement utilisable.


Pour récapituler (si j'ai bien compris) les normes ANSI C89 et ISO C90 sont
les mêmes et la norme C99 est mauvaise. C'est ça ?


La norme C99 n'est pas mauvaise, elle n'est simplement pas assez repandue
pour etre reellement pertinente dans la plupart des niches ou le C est
important.

Mais qu'apporte réellement la C99 par rapport à la C90 ? Ce que je me
demande c'est est-ce ça vaut vraiment le coup d'apprendre la C90 alors
qu'une version plus récente de cette norme existe ? Qu'est-ce que ça
change, c'est simplement des ajouts ou alors certaines choses ont
changés?


Les modifications sont principalement des ajouts.

(notez que les drafts qui
n'ont pas le tampon ISO / CEI peuvent être échangés gratuitement).
J'ai réussi à me les procurer, mais c'est plutôt compliqué...



C'est le genre de documents qui supposent qu'on maitrise deja le sujet. Et
le probleme principal avec eux n'est pas d'en comprendre un extrait -- ce
n'est pas simple -- mais d'etre sur qu'il n'y a rien ailleurs de
pertinent. (Et je viens de le prouver a nouveau dans l'autre discussion).

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Dewi
(notez que les drafts qui
n'ont pas le tampon ISO / CEI peuvent être échangés gratuitement).
J'ai réussi à me les procurer, mais c'est plutôt compliqué...

Je voulais dire compliqué à lire.



Merci à vous tous pour vos réponses.
Je vais donc continuer mon apprentissage du C, et je m'achèterai le K&R
un peu plus tard.



Avatar
Pierre Maurette

[...]

Pour récapituler (si j'ai bien compris) les normes ANSI C89 et ISO C90 sont
les mêmes et la norme C99 est mauvaise. C'est ça ?
Mais qu'apporte réellement la C99 par rapport à la C90 ? Ce que je me demande
c'est est-ce ça vaut vraiment le coup d'apprendre la C90 alors qu'une version
plus récente de cette norme existe ? Qu'est-ce que ça change, c'est
simplement des ajouts ou alors certaines choses ont changés ?


Google m'a donné ça (première réponse avec c99):
<URL:http://nicolasj.developpez.com/articles/c99/#LII-C>

Je m'étais posé ce genre de questions quand j'ai débuté le C, en
ajoutant le C++. J'ai gardé ça dans mes favoris, qui m'avait bien aidé:
<URL:http://david.tribble.com/text/cdiffs.htm>

Un des problèmes avec C99 est que son utilisation "complète" (voir plus
bas) réduit la portabilité effective de son code. Si on considère que
la portabilité, c'est la conformité à un standard, mais c'est aussi la
disponiblité de compilateurs, voire d'un choix de compilateurs. Le
compilateur de Microsoft par exemple n'est pas et ne sera pas C99 sauf
erreur de ma part.
Ajoutons que du code C90 va généralement compiler en C++98, moyennant
quelques modifications en général faciles, et encore si on n'a pas
anticipé. Je crois que "c'est mal", mais je trouve que pouvoir copier -
coller une fonction C dans du C++ peut être pratique, même s'il existe
d'autres solutions. Et du code C99 "complet" ne va pas compiler en C++.

Je parle d'utilisation "complète", je précise donc. Entre C90 et C99,
il y a des ajouts plus ou moins cosmétiques, qui parfois rapprochent de
C++. Par exemple les commentaires "fin de ligne", //. Ce type d'ajout
est généralement facile à modifier en cas d'indisponibilité d'un
compilateur C99. Ce sont parfois des extensions très répandues des
compilateurs C90.
En revanche, les nouveautées profondes, par exemple les VLA, demandent
pour revenir à une compatibilité C90 une remise en cause de la
structure du code.

--
Pierre Maurette

Avatar
Jean-Marc Bourguet
Pierre Maurette writes:

Si on considère que la portabilité, c'est la conformité à un standard,
mais c'est aussi la disponiblité de compilateurs, voire d'un choix de
compilateurs.


Ta phrase est etrange. Je crois que nous sommes d'accord sur le fond, mais
je vais reenfoncer le clou.

La conformite est un moyen pour atteindre la portabilite mais on peut etre
portable sans etre conforme et etre conforme ne suffit pas a etre portable.

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org

1 2