Marc Espie a écrit :Ou alors,
tu n'aimes pas Harbison & Steele ?
Très exactement. Et j'ai lu intégralement, crayon rageur à la main de la
page 1 à la page 324 donc tout ce qui concerne le langage et les
généralités concernant le_s_ bibliothèque_s_ (sic). Je me suis dispensé
de lire la descriptions une à une des fonctions standard mais je
consulte souvent la partie que je n'ai pas lu concernant des points
importants et délicats ou des questions ponctuelles. Je le consulte très
très souvent par ailleurs et ce sont toujours les mêmes défauts qui
reviennent d'absence de clarté, de mauvaise navigabilité (facheux pour
un ouvrage de référence). Je n'en finirais pas d'énumérer les défauts de
cet ouvrage un des pires que je connaisse, du mauvais travail, et comme
on en est à la cinquième édition, c'est que le travail était mal né. Je
ne remets pas pour autant en cause la compétence des auteurs, je crois
qu'elles est connue et reconnue.
Manque de bol, sur un axe tres precis, c'est effectivement un des
meilleurs
bouquins existants: c'est un tres bon ouvrage de reference vis-a-vis du
langage. Forcement moins exact que la norme, par construction, mais
egalement
sensiblement plus digeste.
Même pas sûr.
Je ne l'ai jamais pris en defaut jusqu'ici.
Va voir l'errata tu seras impressionné de sa longueur. Des pans entiers
sont incorrects aux dires même des auteurs.
Par contre, ca n'est clairement pas un bouquin d'apprentissage du C.
Non mais le niveau est étonnement hétérogène : il glose sur du trivial
et néglige le délicat.Mais, sur ce plan, je ne sais pas s'il existe grand chose de correct en
dehors du K&R (qui est fort bien, mais quelque peu limite parfois)...
Fort bien ? bof, c'est un très mauvais ouvrage d'apprentissage, écrit
avec peu de rigueur pédagogique ou plutôt avec une rigueur pédagogique
très inégale, lumineux parfois, obscur et surchargé souvent. Je précise
que j'ai lu l'ouvrage crayon à la main de A à Z et c'est l'ouvrage que
je consulte en priorité pour tenter d'avoir une vue d'ensemble sur une
question donné sans compter qu'il contient du code hautement
idiomatique. Disons que le bouquin est correct quand on connait déjà
assez bien le langage ce qui est fâcheux pour un ouvrage qui est censé
vous l'apprendre.
les autres bouquins auxquels j'ai jete un oeil sont le plus souvent
largement pires (en particulier, remplis d'erreurs et d'inexactitudes).
Hélas, il n'existe aucun bouquin ni même document décent sur le C (j'en
ai consulté ou lu des dizaines) mais il existe une multiplicité de
références plus ou moins correctes sur tel ou tel point plus ou moins
important. C'est pas compliqué tu prends une à une les questions plus ou
moins basiques sur le C qu'on lisait sur fclc il y a quelques années ou
encore maintenant sur clc voire sur csc et tu dois te rendre compte que
la réponse n'est dans aucun document figé. Pourtant, ces questions
répondent à un savoir figé (le C est une langue morte bien que toujours
parlé et étudié) et est connu de nombreuses personnes. Bien sûr, ce que
je te dis là vaut de beaucoup d'autres choses, en particulier tout ce
qui touche à l'utilisation d'outils informatiques où le savoir ne passe
pas par la documentation à moins d'être du sérail. Faut pas s'étonner
des succès de sites du genre le siteduzéro.
Marc Espie a écrit :
Ou alors,
tu n'aimes pas Harbison & Steele ?
Très exactement. Et j'ai lu intégralement, crayon rageur à la main de la
page 1 à la page 324 donc tout ce qui concerne le langage et les
généralités concernant le_s_ bibliothèque_s_ (sic). Je me suis dispensé
de lire la descriptions une à une des fonctions standard mais je
consulte souvent la partie que je n'ai pas lu concernant des points
importants et délicats ou des questions ponctuelles. Je le consulte très
très souvent par ailleurs et ce sont toujours les mêmes défauts qui
reviennent d'absence de clarté, de mauvaise navigabilité (facheux pour
un ouvrage de référence). Je n'en finirais pas d'énumérer les défauts de
cet ouvrage un des pires que je connaisse, du mauvais travail, et comme
on en est à la cinquième édition, c'est que le travail était mal né. Je
ne remets pas pour autant en cause la compétence des auteurs, je crois
qu'elles est connue et reconnue.
Manque de bol, sur un axe tres precis, c'est effectivement un des
meilleurs
bouquins existants: c'est un tres bon ouvrage de reference vis-a-vis du
langage. Forcement moins exact que la norme, par construction, mais
egalement
sensiblement plus digeste.
Même pas sûr.
Je ne l'ai jamais pris en defaut jusqu'ici.
Va voir l'errata tu seras impressionné de sa longueur. Des pans entiers
sont incorrects aux dires même des auteurs.
Par contre, ca n'est clairement pas un bouquin d'apprentissage du C.
Non mais le niveau est étonnement hétérogène : il glose sur du trivial
et néglige le délicat.
Mais, sur ce plan, je ne sais pas s'il existe grand chose de correct en
dehors du K&R (qui est fort bien, mais quelque peu limite parfois)...
Fort bien ? bof, c'est un très mauvais ouvrage d'apprentissage, écrit
avec peu de rigueur pédagogique ou plutôt avec une rigueur pédagogique
très inégale, lumineux parfois, obscur et surchargé souvent. Je précise
que j'ai lu l'ouvrage crayon à la main de A à Z et c'est l'ouvrage que
je consulte en priorité pour tenter d'avoir une vue d'ensemble sur une
question donné sans compter qu'il contient du code hautement
idiomatique. Disons que le bouquin est correct quand on connait déjà
assez bien le langage ce qui est fâcheux pour un ouvrage qui est censé
vous l'apprendre.
les autres bouquins auxquels j'ai jete un oeil sont le plus souvent
largement pires (en particulier, remplis d'erreurs et d'inexactitudes).
Hélas, il n'existe aucun bouquin ni même document décent sur le C (j'en
ai consulté ou lu des dizaines) mais il existe une multiplicité de
références plus ou moins correctes sur tel ou tel point plus ou moins
important. C'est pas compliqué tu prends une à une les questions plus ou
moins basiques sur le C qu'on lisait sur fclc il y a quelques années ou
encore maintenant sur clc voire sur csc et tu dois te rendre compte que
la réponse n'est dans aucun document figé. Pourtant, ces questions
répondent à un savoir figé (le C est une langue morte bien que toujours
parlé et étudié) et est connu de nombreuses personnes. Bien sûr, ce que
je te dis là vaut de beaucoup d'autres choses, en particulier tout ce
qui touche à l'utilisation d'outils informatiques où le savoir ne passe
pas par la documentation à moins d'être du sérail. Faut pas s'étonner
des succès de sites du genre le siteduzéro.
Marc Espie a écrit :Ou alors,
tu n'aimes pas Harbison & Steele ?
Très exactement. Et j'ai lu intégralement, crayon rageur à la main de la
page 1 à la page 324 donc tout ce qui concerne le langage et les
généralités concernant le_s_ bibliothèque_s_ (sic). Je me suis dispensé
de lire la descriptions une à une des fonctions standard mais je
consulte souvent la partie que je n'ai pas lu concernant des points
importants et délicats ou des questions ponctuelles. Je le consulte très
très souvent par ailleurs et ce sont toujours les mêmes défauts qui
reviennent d'absence de clarté, de mauvaise navigabilité (facheux pour
un ouvrage de référence). Je n'en finirais pas d'énumérer les défauts de
cet ouvrage un des pires que je connaisse, du mauvais travail, et comme
on en est à la cinquième édition, c'est que le travail était mal né. Je
ne remets pas pour autant en cause la compétence des auteurs, je crois
qu'elles est connue et reconnue.
Manque de bol, sur un axe tres precis, c'est effectivement un des
meilleurs
bouquins existants: c'est un tres bon ouvrage de reference vis-a-vis du
langage. Forcement moins exact que la norme, par construction, mais
egalement
sensiblement plus digeste.
Même pas sûr.
Je ne l'ai jamais pris en defaut jusqu'ici.
Va voir l'errata tu seras impressionné de sa longueur. Des pans entiers
sont incorrects aux dires même des auteurs.
Par contre, ca n'est clairement pas un bouquin d'apprentissage du C.
Non mais le niveau est étonnement hétérogène : il glose sur du trivial
et néglige le délicat.Mais, sur ce plan, je ne sais pas s'il existe grand chose de correct en
dehors du K&R (qui est fort bien, mais quelque peu limite parfois)...
Fort bien ? bof, c'est un très mauvais ouvrage d'apprentissage, écrit
avec peu de rigueur pédagogique ou plutôt avec une rigueur pédagogique
très inégale, lumineux parfois, obscur et surchargé souvent. Je précise
que j'ai lu l'ouvrage crayon à la main de A à Z et c'est l'ouvrage que
je consulte en priorité pour tenter d'avoir une vue d'ensemble sur une
question donné sans compter qu'il contient du code hautement
idiomatique. Disons que le bouquin est correct quand on connait déjà
assez bien le langage ce qui est fâcheux pour un ouvrage qui est censé
vous l'apprendre.
les autres bouquins auxquels j'ai jete un oeil sont le plus souvent
largement pires (en particulier, remplis d'erreurs et d'inexactitudes).
Hélas, il n'existe aucun bouquin ni même document décent sur le C (j'en
ai consulté ou lu des dizaines) mais il existe une multiplicité de
références plus ou moins correctes sur tel ou tel point plus ou moins
important. C'est pas compliqué tu prends une à une les questions plus ou
moins basiques sur le C qu'on lisait sur fclc il y a quelques années ou
encore maintenant sur clc voire sur csc et tu dois te rendre compte que
la réponse n'est dans aucun document figé. Pourtant, ces questions
répondent à un savoir figé (le C est une langue morte bien que toujours
parlé et étudié) et est connu de nombreuses personnes. Bien sûr, ce que
je te dis là vaut de beaucoup d'autres choses, en particulier tout ce
qui touche à l'utilisation d'outils informatiques où le savoir ne passe
pas par la documentation à moins d'être du sérail. Faut pas s'étonner
des succès de sites du genre le siteduzéro.
Marc Espie a écrit :Les gens qui programment en C pour de vrai, dont je fais partie, ont
une tendance tres nette a NE PAS utiliser les bouts du langage les moins
clairs et les plus vicieux.
Je m'imagine à leur place et je pense que je ferais pareil. Mais bon, je
suis moins intéressé par la programmation en C que par son apprentissage
ou sa glose.
Mais à vrai dire, l'avis qui m'intéresse le plus est celui des
praticiens comme toi (et qui font qu'un langage mort peut être encore
vivant).
Le problème est qu'il faudrait délimiter objectivement ces questions se
référant à ces parties peu claires et vicieuses. Empoignades
interminables garanties.
Pour toi, j'ai retenu qu'il y avait déjà les variables globales (même si
le problème est un peu différent), les macro-fonctions et les enum.
Si ce sont des morceaux pour lesquels il est
difficile de trouver des reponses, il y a de tres fortes chances
T'es un pragmatique toi !qu'une
part non negligeable des implementations soient fausses...
Implémentation de quoi ? du langage C ? parce qu'on mettre aussi en
cause les mauvaises pratiques des programmeurs et les incohérences
éventuelles de la norme.
Typiquement, tes questions recentes sur les enum. Les points un peu
bizarres de typage des enums font qu'une enum est tres rarement une bonne
idee, et qu'en tout cas il vaut mieux ne pas dependre des points obscurs
de la norme.
Je pense que ton avis sur les enum est loin de faire l'unanimité. Et si
tu regardes du code sérieux, tu sais bien que les énumérations sont très
utilisées.
En deux mots, pourrais-tu donner un exemple de code montrant un problème
soulevé par un type énuméré et dire par quoi tu remplaces tes enum (des
macro-constantes ? des variables const ?)
Tiens, pour alimenter la discussion, voici ce que dit K&R des
énumérations (numérotation et passages à la lignes sont de moi) :
-----------------------------------------------------------------------
Enumerations provide a convenient way to associate constant values with
names, an alternative to #define with the advantage that
(1) the values can be generated for you.
(2) Although variables of enum types may be declared, compilers need not
check that what you store in such a variable is a valid value for the
enumeration.
(3) Nevertheless, enumeration variables offer the chance of checking and
so are often better than #defines. In addition, a debugger may be able
to print values of enumeration variables in their symbolic form.
-----------------------------------------------------------------------
Mes questions :
(1) je comprends ce qu'il veut dire par ça. En clair, c'est quoi
l'avantage ? qu'on dispose de vraies variables ?
(2) phrase très ambiguë. Je vais quand même avoir un problème si je mets
un flottant dans une variable de type enum toto, ça le compilateur il va
le voir.
(3) le checking, un réel avantage ? meilleure sécurité ?
Par ailleurs, je précise que Kernighan et Pike recommandent dans "The
Pratice of Programming" (page 20) :
---------------- 8< ----------------------
Define numbers as constants, not macros.
[...]In C and C++, integer constants can be defined with an enum
statement as we saw in the previous example. [...]C has also const
values but they cannot be used as array bounds, so the enum statement
remains the method of choice in C.
------------------ >8 ---------------------
Marc Espie a écrit :
Les gens qui programment en C pour de vrai, dont je fais partie, ont
une tendance tres nette a NE PAS utiliser les bouts du langage les moins
clairs et les plus vicieux.
Je m'imagine à leur place et je pense que je ferais pareil. Mais bon, je
suis moins intéressé par la programmation en C que par son apprentissage
ou sa glose.
Mais à vrai dire, l'avis qui m'intéresse le plus est celui des
praticiens comme toi (et qui font qu'un langage mort peut être encore
vivant).
Le problème est qu'il faudrait délimiter objectivement ces questions se
référant à ces parties peu claires et vicieuses. Empoignades
interminables garanties.
Pour toi, j'ai retenu qu'il y avait déjà les variables globales (même si
le problème est un peu différent), les macro-fonctions et les enum.
Si ce sont des morceaux pour lesquels il est
difficile de trouver des reponses, il y a de tres fortes chances
T'es un pragmatique toi !
qu'une
part non negligeable des implementations soient fausses...
Implémentation de quoi ? du langage C ? parce qu'on mettre aussi en
cause les mauvaises pratiques des programmeurs et les incohérences
éventuelles de la norme.
Typiquement, tes questions recentes sur les enum. Les points un peu
bizarres de typage des enums font qu'une enum est tres rarement une bonne
idee, et qu'en tout cas il vaut mieux ne pas dependre des points obscurs
de la norme.
Je pense que ton avis sur les enum est loin de faire l'unanimité. Et si
tu regardes du code sérieux, tu sais bien que les énumérations sont très
utilisées.
En deux mots, pourrais-tu donner un exemple de code montrant un problème
soulevé par un type énuméré et dire par quoi tu remplaces tes enum (des
macro-constantes ? des variables const ?)
Tiens, pour alimenter la discussion, voici ce que dit K&R des
énumérations (numérotation et passages à la lignes sont de moi) :
-----------------------------------------------------------------------
Enumerations provide a convenient way to associate constant values with
names, an alternative to #define with the advantage that
(1) the values can be generated for you.
(2) Although variables of enum types may be declared, compilers need not
check that what you store in such a variable is a valid value for the
enumeration.
(3) Nevertheless, enumeration variables offer the chance of checking and
so are often better than #defines. In addition, a debugger may be able
to print values of enumeration variables in their symbolic form.
-----------------------------------------------------------------------
Mes questions :
(1) je comprends ce qu'il veut dire par ça. En clair, c'est quoi
l'avantage ? qu'on dispose de vraies variables ?
(2) phrase très ambiguë. Je vais quand même avoir un problème si je mets
un flottant dans une variable de type enum toto, ça le compilateur il va
le voir.
(3) le checking, un réel avantage ? meilleure sécurité ?
Par ailleurs, je précise que Kernighan et Pike recommandent dans "The
Pratice of Programming" (page 20) :
---------------- 8< ----------------------
Define numbers as constants, not macros.
[...]In C and C++, integer constants can be defined with an enum
statement as we saw in the previous example. [...]C has also const
values but they cannot be used as array bounds, so the enum statement
remains the method of choice in C.
------------------ >8 ---------------------
Marc Espie a écrit :Les gens qui programment en C pour de vrai, dont je fais partie, ont
une tendance tres nette a NE PAS utiliser les bouts du langage les moins
clairs et les plus vicieux.
Je m'imagine à leur place et je pense que je ferais pareil. Mais bon, je
suis moins intéressé par la programmation en C que par son apprentissage
ou sa glose.
Mais à vrai dire, l'avis qui m'intéresse le plus est celui des
praticiens comme toi (et qui font qu'un langage mort peut être encore
vivant).
Le problème est qu'il faudrait délimiter objectivement ces questions se
référant à ces parties peu claires et vicieuses. Empoignades
interminables garanties.
Pour toi, j'ai retenu qu'il y avait déjà les variables globales (même si
le problème est un peu différent), les macro-fonctions et les enum.
Si ce sont des morceaux pour lesquels il est
difficile de trouver des reponses, il y a de tres fortes chances
T'es un pragmatique toi !qu'une
part non negligeable des implementations soient fausses...
Implémentation de quoi ? du langage C ? parce qu'on mettre aussi en
cause les mauvaises pratiques des programmeurs et les incohérences
éventuelles de la norme.
Typiquement, tes questions recentes sur les enum. Les points un peu
bizarres de typage des enums font qu'une enum est tres rarement une bonne
idee, et qu'en tout cas il vaut mieux ne pas dependre des points obscurs
de la norme.
Je pense que ton avis sur les enum est loin de faire l'unanimité. Et si
tu regardes du code sérieux, tu sais bien que les énumérations sont très
utilisées.
En deux mots, pourrais-tu donner un exemple de code montrant un problème
soulevé par un type énuméré et dire par quoi tu remplaces tes enum (des
macro-constantes ? des variables const ?)
Tiens, pour alimenter la discussion, voici ce que dit K&R des
énumérations (numérotation et passages à la lignes sont de moi) :
-----------------------------------------------------------------------
Enumerations provide a convenient way to associate constant values with
names, an alternative to #define with the advantage that
(1) the values can be generated for you.
(2) Although variables of enum types may be declared, compilers need not
check that what you store in such a variable is a valid value for the
enumeration.
(3) Nevertheless, enumeration variables offer the chance of checking and
so are often better than #defines. In addition, a debugger may be able
to print values of enumeration variables in their symbolic form.
-----------------------------------------------------------------------
Mes questions :
(1) je comprends ce qu'il veut dire par ça. En clair, c'est quoi
l'avantage ? qu'on dispose de vraies variables ?
(2) phrase très ambiguë. Je vais quand même avoir un problème si je mets
un flottant dans une variable de type enum toto, ça le compilateur il va
le voir.
(3) le checking, un réel avantage ? meilleure sécurité ?
Par ailleurs, je précise que Kernighan et Pike recommandent dans "The
Pratice of Programming" (page 20) :
---------------- 8< ----------------------
Define numbers as constants, not macros.
[...]In C and C++, integer constants can be defined with an enum
statement as we saw in the previous example. [...]C has also const
values but they cannot be used as array bounds, so the enum statement
remains the method of choice in C.
------------------ >8 ---------------------
candide a écrit :
Par ailleurs, je précise que Kernighan et Pike recommandent dans "The
Pratice of Programming" (page 20) :
---------------- 8< ----------------------
[...]In C and C++, integer constants can be defined with an enum
statement[...] so the enum statement ------------------ >8 ---------------------
Tiens "enum statement" ? ça existe ça ? Ce serait pas plutôt "enum
declaration" ?
candide a écrit :
Par ailleurs, je précise que Kernighan et Pike recommandent dans "The
Pratice of Programming" (page 20) :
---------------- 8< ----------------------
[...]In C and C++, integer constants can be defined with an enum
statement
[...] so the enum statement ------------------ >8 ---------------------
Tiens "enum statement" ? ça existe ça ? Ce serait pas plutôt "enum
declaration" ?
candide a écrit :
Par ailleurs, je précise que Kernighan et Pike recommandent dans "The
Pratice of Programming" (page 20) :
---------------- 8< ----------------------
[...]In C and C++, integer constants can be defined with an enum
statement[...] so the enum statement ------------------ >8 ---------------------
Tiens "enum statement" ? ça existe ça ? Ce serait pas plutôt "enum
declaration" ?
Ta phrase tendrait à dire, par analogie, que tu es plus intéressé par
l'apprentissage du dictionnaire et de la grammaire française que par
l'écriture du français ??
Ça paraît bizarre...
Pour moi :
- les macros-fonctions
- les chaînes de caractères avec cette stupidité du pour marquer la
fin de chaîne. Il aurait plutôt fallu faire comme en PL/1
- l'équivalence pointeur/tableau
- la structure de bloc qui est bancale (on ne peut pas définir de
fonction à l'intérieur d'une fonction). Il n'y a donc pas de notion de
fonction locale (il n'y a que la notion de fonction statique...)
- le trop grand nombre de conversions implicites
- le typedef qui introduit une liaison forte entre les niveaux lexical
et syntaxique et qui n'est pas du "vrai" typage mais seulement de
l'homonymie.
(1) je comprends ce qu'il veut dire par ça. En clair, c'est quoi
l'avantage ? qu'on dispose de vraies variables ?
Un type enum est un ... type. #define n'indique aucun type pour un nom
et ce n'est pas une variable... (aucun contrôle ne peut être effectué
par le compilateur).
(2) phrase très ambiguë. Je vais quand même avoir un problème si je
mets un flottant dans une variable de type enum toto, ça le
compilateur il va le voir.
Ouais. Cette phrase est bizarre mais il y en a plein des comme ça dans
leur bouquin et ça reflète bien leur esprit assez tordu, il faut le dire...
avant vers du code plus sécurisé. Cependant, écrire du code fiable de
bout en bout en C me paraît seulement à la portée des 5% de programmeurs
C qui maîtrisent totalement le langage (et encore).
Ta phrase tendrait à dire, par analogie, que tu es plus intéressé par
l'apprentissage du dictionnaire et de la grammaire française que par
l'écriture du français ??
Ça paraît bizarre...
Pour moi :
- les macros-fonctions
- les chaînes de caractères avec cette stupidité du pour marquer la
fin de chaîne. Il aurait plutôt fallu faire comme en PL/1
- l'équivalence pointeur/tableau
- la structure de bloc qui est bancale (on ne peut pas définir de
fonction à l'intérieur d'une fonction). Il n'y a donc pas de notion de
fonction locale (il n'y a que la notion de fonction statique...)
- le trop grand nombre de conversions implicites
- le typedef qui introduit une liaison forte entre les niveaux lexical
et syntaxique et qui n'est pas du "vrai" typage mais seulement de
l'homonymie.
(1) je comprends ce qu'il veut dire par ça. En clair, c'est quoi
l'avantage ? qu'on dispose de vraies variables ?
Un type enum est un ... type. #define n'indique aucun type pour un nom
et ce n'est pas une variable... (aucun contrôle ne peut être effectué
par le compilateur).
(2) phrase très ambiguë. Je vais quand même avoir un problème si je
mets un flottant dans une variable de type enum toto, ça le
compilateur il va le voir.
Ouais. Cette phrase est bizarre mais il y en a plein des comme ça dans
leur bouquin et ça reflète bien leur esprit assez tordu, il faut le dire...
avant vers du code plus sécurisé. Cependant, écrire du code fiable de
bout en bout en C me paraît seulement à la portée des 5% de programmeurs
C qui maîtrisent totalement le langage (et encore).
Ta phrase tendrait à dire, par analogie, que tu es plus intéressé par
l'apprentissage du dictionnaire et de la grammaire française que par
l'écriture du français ??
Ça paraît bizarre...
Pour moi :
- les macros-fonctions
- les chaînes de caractères avec cette stupidité du pour marquer la
fin de chaîne. Il aurait plutôt fallu faire comme en PL/1
- l'équivalence pointeur/tableau
- la structure de bloc qui est bancale (on ne peut pas définir de
fonction à l'intérieur d'une fonction). Il n'y a donc pas de notion de
fonction locale (il n'y a que la notion de fonction statique...)
- le trop grand nombre de conversions implicites
- le typedef qui introduit une liaison forte entre les niveaux lexical
et syntaxique et qui n'est pas du "vrai" typage mais seulement de
l'homonymie.
(1) je comprends ce qu'il veut dire par ça. En clair, c'est quoi
l'avantage ? qu'on dispose de vraies variables ?
Un type enum est un ... type. #define n'indique aucun type pour un nom
et ce n'est pas une variable... (aucun contrôle ne peut être effectué
par le compilateur).
(2) phrase très ambiguë. Je vais quand même avoir un problème si je
mets un flottant dans une variable de type enum toto, ça le
compilateur il va le voir.
Ouais. Cette phrase est bizarre mais il y en a plein des comme ça dans
leur bouquin et ça reflète bien leur esprit assez tordu, il faut le dire...
avant vers du code plus sécurisé. Cependant, écrire du code fiable de
bout en bout en C me paraît seulement à la portée des 5% de programmeurs
C qui maîtrisent totalement le langage (et encore).
Tiens "enum statement" ? ça existe ça ? Ce serait pas plutôt "enum
declaration" ?
Cette confusion est habituelle chez K&R.
Tiens "enum statement" ? ça existe ça ? Ce serait pas plutôt "enum
declaration" ?
Cette confusion est habituelle chez K&R.
Tiens "enum statement" ? ça existe ça ? Ce serait pas plutôt "enum
declaration" ?
Cette confusion est habituelle chez K&R.
langage. Forcement moins exact que la norme, par construction, mais
egalement
sensiblement plus digeste.
Même pas sûr.
Oh que si !
C'est une preuve d'honnêteté de la part des auteurs. D'autres, moins
scrupuleux, laissent leurs erreurs traîner de version en version...
Le K&R est anti-pédagogique !
Il m'est arrivé plusieurs fois de préconiser aux participants d'un cours
sur le langage C de mettre ce livre à la poubelle. C'est un des plus
mauvais sur le langage (pour l'apprentissage, je préfère le Harbison et
Steele, c'est peu dire...)
J'aimais bien le bouquin de Philippe Drix : langage C, norme ANSI,
sous-titré, vers une approche objet.
langage. Forcement moins exact que la norme, par construction, mais
egalement
sensiblement plus digeste.
Même pas sûr.
Oh que si !
C'est une preuve d'honnêteté de la part des auteurs. D'autres, moins
scrupuleux, laissent leurs erreurs traîner de version en version...
Le K&R est anti-pédagogique !
Il m'est arrivé plusieurs fois de préconiser aux participants d'un cours
sur le langage C de mettre ce livre à la poubelle. C'est un des plus
mauvais sur le langage (pour l'apprentissage, je préfère le Harbison et
Steele, c'est peu dire...)
J'aimais bien le bouquin de Philippe Drix : langage C, norme ANSI,
sous-titré, vers une approche objet.
langage. Forcement moins exact que la norme, par construction, mais
egalement
sensiblement plus digeste.
Même pas sûr.
Oh que si !
C'est une preuve d'honnêteté de la part des auteurs. D'autres, moins
scrupuleux, laissent leurs erreurs traîner de version en version...
Le K&R est anti-pédagogique !
Il m'est arrivé plusieurs fois de préconiser aux participants d'un cours
sur le langage C de mettre ce livre à la poubelle. C'est un des plus
mauvais sur le langage (pour l'apprentissage, je préfère le Harbison et
Steele, c'est peu dire...)
J'aimais bien le bouquin de Philippe Drix : langage C, norme ANSI,
sous-titré, vers une approche objet.
Il est vrai que la littérature sur le langage C n'est pas terrible, à
commencer par le livre des auteurs du langage lui-même dans lequel de
nombreux exemples de code sont justement plutôt des exemples de ce qu'il
ne faudrait pas écrire en C...
Il faut utiliser les enum en C pour ce qu'ils sont et les services
qu'ils peuvent rendre :
- augmenter la lisibilité des programmes. Il est toujours préférable de,
par exemple, nommer les jours que de se servir de 1, 2, 3, ..., 7
- Les enum doivent être utilisés conjointement avec switch.
D'une façon générale, il faut utiliser les enums en C comme ils sont
utilisés dans les autres langages, en particulier ADA.
Et surtout, il ne faut JAMAIS mélanger les enum et les int !
Il est vrai que la littérature sur le langage C n'est pas terrible, à
commencer par le livre des auteurs du langage lui-même dans lequel de
nombreux exemples de code sont justement plutôt des exemples de ce qu'il
ne faudrait pas écrire en C...
Il faut utiliser les enum en C pour ce qu'ils sont et les services
qu'ils peuvent rendre :
- augmenter la lisibilité des programmes. Il est toujours préférable de,
par exemple, nommer les jours que de se servir de 1, 2, 3, ..., 7
- Les enum doivent être utilisés conjointement avec switch.
D'une façon générale, il faut utiliser les enums en C comme ils sont
utilisés dans les autres langages, en particulier ADA.
Et surtout, il ne faut JAMAIS mélanger les enum et les int !
Il est vrai que la littérature sur le langage C n'est pas terrible, à
commencer par le livre des auteurs du langage lui-même dans lequel de
nombreux exemples de code sont justement plutôt des exemples de ce qu'il
ne faudrait pas écrire en C...
Il faut utiliser les enum en C pour ce qu'ils sont et les services
qu'ils peuvent rendre :
- augmenter la lisibilité des programmes. Il est toujours préférable de,
par exemple, nommer les jours que de se servir de 1, 2, 3, ..., 7
- Les enum doivent être utilisés conjointement avec switch.
D'une façon générale, il faut utiliser les enums en C comme ils sont
utilisés dans les autres langages, en particulier ADA.
Et surtout, il ne faut JAMAIS mélanger les enum et les int !
Bonjour,
Si, par exemple
enum toto {A4, BQ} t;
peut-on écrire
t(;
(cela pourrait poser problème si l'on considère que les valeurs prises par
une variable de type enum toto sont parmi 34 et 51, cf. ma première citation
de la norme) ? Bon, en fait j'imagine que ça ne pose pas de problème
particulier mais je trouve que la norme n'est pas formelle sur ce point. Par
contre, pourrait-il y avoir des problèmes si on écrivait
t=-5;
?
Quelles précautions particulières prendre avec des variables de type
énumération ? Harbison & Steele recommandent une certaine prudence :
--------------------------- 8< ------------------------------------
We suggest that programmers treat enumerated types as different from integers
and not mix them in integer expressions without using casts.
--------------------------- >8 ------------------------------------
mais ils ne donnent aucun exemple illustrant les précautions à prendre.
Concrètement faut faire quoi ?
Ainsi dans mon premier exemple ci-dessus,
dois-je écrire
t=(enum toto) 28;
?
Bonjour,
Si, par exemple
enum toto {A4, BQ} t;
peut-on écrire
t(;
(cela pourrait poser problème si l'on considère que les valeurs prises par
une variable de type enum toto sont parmi 34 et 51, cf. ma première citation
de la norme) ? Bon, en fait j'imagine que ça ne pose pas de problème
particulier mais je trouve que la norme n'est pas formelle sur ce point. Par
contre, pourrait-il y avoir des problèmes si on écrivait
t=-5;
?
Quelles précautions particulières prendre avec des variables de type
énumération ? Harbison & Steele recommandent une certaine prudence :
--------------------------- 8< ------------------------------------
We suggest that programmers treat enumerated types as different from integers
and not mix them in integer expressions without using casts.
--------------------------- >8 ------------------------------------
mais ils ne donnent aucun exemple illustrant les précautions à prendre.
Concrètement faut faire quoi ?
Ainsi dans mon premier exemple ci-dessus,
dois-je écrire
t=(enum toto) 28;
?
Bonjour,
Si, par exemple
enum toto {A4, BQ} t;
peut-on écrire
t(;
(cela pourrait poser problème si l'on considère que les valeurs prises par
une variable de type enum toto sont parmi 34 et 51, cf. ma première citation
de la norme) ? Bon, en fait j'imagine que ça ne pose pas de problème
particulier mais je trouve que la norme n'est pas formelle sur ce point. Par
contre, pourrait-il y avoir des problèmes si on écrivait
t=-5;
?
Quelles précautions particulières prendre avec des variables de type
énumération ? Harbison & Steele recommandent une certaine prudence :
--------------------------- 8< ------------------------------------
We suggest that programmers treat enumerated types as different from integers
and not mix them in integer expressions without using casts.
--------------------------- >8 ------------------------------------
mais ils ne donnent aucun exemple illustrant les précautions à prendre.
Concrètement faut faire quoi ?
Ainsi dans mon premier exemple ci-dessus,
dois-je écrire
t=(enum toto) 28;
?
Par contre, ca n'est clairement pas un bouquin d'apprentissage du C.
Mais, sur ce plan, je ne sais pas s'il existe grand chose de correct en
dehors du K&R (qui est fort bien, mais quelque peu limite parfois)...
les autres bouquins auxquels j'ai jete un oeil sont le plus souvent
largement pires (en particulier, remplis d'erreurs et d'inexactitudes).
Par contre, ca n'est clairement pas un bouquin d'apprentissage du C.
Mais, sur ce plan, je ne sais pas s'il existe grand chose de correct en
dehors du K&R (qui est fort bien, mais quelque peu limite parfois)...
les autres bouquins auxquels j'ai jete un oeil sont le plus souvent
largement pires (en particulier, remplis d'erreurs et d'inexactitudes).
Par contre, ca n'est clairement pas un bouquin d'apprentissage du C.
Mais, sur ce plan, je ne sais pas s'il existe grand chose de correct en
dehors du K&R (qui est fort bien, mais quelque peu limite parfois)...
les autres bouquins auxquels j'ai jete un oeil sont le plus souvent
largement pires (en particulier, remplis d'erreurs et d'inexactitudes).
-----------------------------------------------------------------------
Enumerations provide a convenient way to associate constant values with
names, an alternative to #define with the advantage that
(1) the values can be generated for you.
(2) Although variables of enum types may be declared, compilers need not
check that what you store in such a variable is a valid value for the
enumeration.
(3) Nevertheless, enumeration variables offer the chance of checking and
so are often better than #defines. In addition, a debugger may be able
to print values of enumeration variables in their symbolic form.
-----------------------------------------------------------------------
Mes questions :
(1) je comprends ce qu'il veut dire par ça. En clair, c'est quoi
l'avantage ? qu'on dispose de vraies variables ?
(2) phrase très ambiguë. Je vais quand même avoir un problème si je mets
un flottant dans une variable de type enum toto, ça le compilateur il va
le voir.
(3) le checking, un réel avantage ? meilleure sécurité ?
Par ailleurs, je précise que Kernighan et Pike recommandent dans "The
Pratice of Programming" (page 20) :
---------------- 8< ----------------------
Define numbers as constants, not macros.
[...]In C and C++, integer constants can be defined with an enum
statement as we saw in the previous example. [...]C has also const
values but they cannot be used as array bounds, so the enum statement
remains the method of choice in C.
------------------ >8 ---------------------
-----------------------------------------------------------------------
Enumerations provide a convenient way to associate constant values with
names, an alternative to #define with the advantage that
(1) the values can be generated for you.
(2) Although variables of enum types may be declared, compilers need not
check that what you store in such a variable is a valid value for the
enumeration.
(3) Nevertheless, enumeration variables offer the chance of checking and
so are often better than #defines. In addition, a debugger may be able
to print values of enumeration variables in their symbolic form.
-----------------------------------------------------------------------
Mes questions :
(1) je comprends ce qu'il veut dire par ça. En clair, c'est quoi
l'avantage ? qu'on dispose de vraies variables ?
(2) phrase très ambiguë. Je vais quand même avoir un problème si je mets
un flottant dans une variable de type enum toto, ça le compilateur il va
le voir.
(3) le checking, un réel avantage ? meilleure sécurité ?
Par ailleurs, je précise que Kernighan et Pike recommandent dans "The
Pratice of Programming" (page 20) :
---------------- 8< ----------------------
Define numbers as constants, not macros.
[...]In C and C++, integer constants can be defined with an enum
statement as we saw in the previous example. [...]C has also const
values but they cannot be used as array bounds, so the enum statement
remains the method of choice in C.
------------------ >8 ---------------------
-----------------------------------------------------------------------
Enumerations provide a convenient way to associate constant values with
names, an alternative to #define with the advantage that
(1) the values can be generated for you.
(2) Although variables of enum types may be declared, compilers need not
check that what you store in such a variable is a valid value for the
enumeration.
(3) Nevertheless, enumeration variables offer the chance of checking and
so are often better than #defines. In addition, a debugger may be able
to print values of enumeration variables in their symbolic form.
-----------------------------------------------------------------------
Mes questions :
(1) je comprends ce qu'il veut dire par ça. En clair, c'est quoi
l'avantage ? qu'on dispose de vraies variables ?
(2) phrase très ambiguë. Je vais quand même avoir un problème si je mets
un flottant dans une variable de type enum toto, ça le compilateur il va
le voir.
(3) le checking, un réel avantage ? meilleure sécurité ?
Par ailleurs, je précise que Kernighan et Pike recommandent dans "The
Pratice of Programming" (page 20) :
---------------- 8< ----------------------
Define numbers as constants, not macros.
[...]In C and C++, integer constants can be defined with an enum
statement as we saw in the previous example. [...]C has also const
values but they cannot be used as array bounds, so the enum statement
remains the method of choice in C.
------------------ >8 ---------------------