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

Livre pour débuter le C ?

77 réponses
Avatar
pascal.pellizzoni
Bonjour =E0 toutes et =E0 tous,
quel livre me conseilleriez vous sur le langage C, plutot orient=E9 microco=
ntroleurs...
Je pr=E9cise que je suis technicien en =E9lectronique, et que j'ai quand me=
me des notions de programmations...
J'ai vu rapidement le langage en BTS, mais il m'a toujours rebut=E9, m=EAme=
si je reste persuad=E9 qu'il est puissant, versatile, portable, enfin bref=
bourr=E9 de qualit=E9s connues et reconnues...=20
Sinon, =E0 part =E7a, vous allez vous moquer de moi, mais j'ai commenc=E9 =
=E0 "bidouiller" en BASIC =E0 la fin des ann=E9es 80 sur le Commodore C64 d=
e mon fr=E8re... En plus le "Basic V2" du C64 n'=E9tait deja pas une r=E9f=
=E9rence !
Un peu plus tard, j'ai bidouill=E9 en Visual Basic 1.0, puis en Quick Basic=
4.5, ...
En BTS je me suis =E9clat=E9 en assembleur 68705 et 68HC11... Et pour la su=
ite, plus grand chose, =E0 mon grand regret !
J'ai d=E9ja post=E9 un message =E0 ce sujet sur fr.sci.electronique, beauco=
up m'ont conseill=E9 le K&R, ou le ANSI C.
Merci par avance de votre aide !

10 réponses

4 5 6 7 8
Avatar
JKB
Le Tue, 28 Aug 2012 10:42:45 +0200 (CEST),
Manuel Pégourié-Gonnard écrivait :
JKB scripsit :

Le Mon, 27 Aug 2012 21:27:47 +0200,
Richard Delorme écrivait :
Je comprends que l'on puisse ne pas apprécier le principe de
délimitation de blocs par l'indentation de Python, mais je le comprends
en tant qu'opinion ou goût personnel. Or là j'ai l'impression que tu as
des faits à avancer. Aussi je pose la question : En quoi est-ce nuisible
à la qualité du code et contraire aux principes du génie logiciel ?



Parce qu'il n'y a rien qui ressemble plus à une tabulation qu'une
suite d'espaces et que le résultat est catastrophique.



Il me semble que c'est à ça que sert l'option -t de l'interpréteur
python.

(Sans parler du fait que les éditeurs décents ont des options pour ça,
par exemple 'set list' sous vim.)



Ce n'est pas parce qu'il y a des moyens de contourner la chose que
ce n'est pas un choix que je qualifie de débile. J'ai des souvenirs
de scripts d'installation qui se baugeaient lamentablement sur de
telles erreurs.

Ce qui me dérange certainement le plus, c'est qu'on mélange avec
cette histoire d'indentation le fond et la forme, ce qui ne devrait
jamais être le cas. Lorsque tu écris un truc comme :

begin
sldkfjsldkj
lsdkfjsldkfjlsk
slkdfjlskdfjlk
end

ton bloc est parfaitement délimité et explicitement délimité.
L'indentation est alors plus une hygiène de vie et une bonne
habitude de codage.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
Wykaaa
JKB a écrit :
Le Tue, 28 Aug 2012 10:42:45 +0200 (CEST),
Manuel Pégourié-Gonnard écrivait :
JKB scripsit :

Le Mon, 27 Aug 2012 21:27:47 +0200,
Richard Delorme écrivait :
Je comprends que l'on puisse ne pas apprécier le principe de
délimitation de blocs par l'indentation de Python, mais je le comprends
en tant qu'opinion ou goût personnel. Or là j'ai l'impression que tu as
des faits à avancer. Aussi je pose la question : En quoi est-ce nuisible
à la qualité du code et contraire aux principes du génie logiciel ?


Parce qu'il n'y a rien qui ressemble plus à une tabulation qu'une
suite d'espaces et que le résultat est catastrophique.



Il me semble que c'est à ça que sert l'option -t de l'interpréteur
python.

(Sans parler du fait que les éditeurs décents ont des options pour ça,
par exemple 'set list' sous vim.)



Ce n'est pas parce qu'il y a des moyens de contourner la chose que
ce n'est pas un choix que je qualifie de débile. J'ai des souvenirs
de scripts d'installation qui se baugeaient lamentablement sur de
telles erreurs.

Ce qui me dérange certainement le plus, c'est qu'on mélange avec
cette histoire d'indentation le fond et la forme, ce qui ne devrait
jamais être le cas. Lorsque tu écris un truc comme :

begin
sldkfjsldkj
lsdkfjsldkfjlsk
slkdfjlskdfjlk
end

ton bloc est parfaitement délimité et explicitement délimité.
L'indentation est alors plus une hygiène de vie et une bonne
habitude de codage.

JKB



On ne peut qu'acquiécer à 100% à tes remarques, en particulier sur le
mélange de la forme et du fond , ce qui est un comble pour un langage
formel car cela mélange la syntaxe et la sémantique, d'où les ambiguïtés
dans certains cas.
Avatar
Jean-Marc Bourguet
Wykaaa writes:

Jean-Marc Bourguet a écrit :

Ah, tu parles de l'implementation, pas de l'utilisation.



Oui. Désolé mais c'est mon réflexe d'implémenteur de compilateurs...

C'est rien comme probleme par rapport a faire fonctionner correctement
les attributs en Ada ou les typedefs en C. Et je ne parle pas de la
syntaxe du C++ qui dans le genre merite une categorie a part.



Les attributs en ADA c'est pas la mort.



J'ai pas dit ca. Mais il me semble que les implementer demande du
feedback du parseur vers le lexeur (de memoire, c'est ce qu'on avait
dans notre parseur VHDL, en general VHDL est plus complexe de l'Ada a
parser mais il ne me semble pas qu'il y ait une difference sur ce
point), ce qui ne me semble pas etre le cas pour rendre l'indentation
significative.

Par contre les typedef en C, c'est débile car cela oblige à fai re des
aller-retours entre l'analyse lexicale et l'analyse syntaxique alors
que ces 2 phases devraient s'enchaîner en séquence comme dans t out bon
compilo qui se respecte.



Sans parler du petit jeu pour arriver a parser des choses comme

typedef int foo; typedef int foo;
void f() { void f() {
struct foo { ... }; struct foo { ... };
int foo; foo i;
} }

A+

--
Jean-Marc
FAQ de fclc: http://www.levenez.com/lang/c/faq
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Avatar
Richard Delorme
Le 28/08/2012 01:15, Wykaaa a écrit :
Richard Delorme a écrit :
Le 27/08/2012 13:08, Wykaaa a écrit :

Les langages à la syntaxe laxiste ou farfelue (je pense en
particulier à Python et ses délimitation de bloc d'instruction par
l'indentation qui est bien la chose a plus stupide que j'ai jamais vue
dans un langage de programmation, et je suis spécialiste des langages et
des compilateurs/interpréteurs) sont nuisibles à la qualité du code et
contraires aux principes du génie logiciel (software engineering).



Je comprends que l'on puisse ne pas apprécier le principe de
délimitation de blocs par l'indentation de Python, mais je le
comprends en tant qu'opinion ou goût personnel. Or là j'ai
l'impression que tu as des faits à avancer. Aussi je pose la question
: En quoi est-ce nuisible à la qualité du code et contraire aux
principes du génie logiciel ?



Parce que l'indentation ne peut être exprimée correctement en BNF et
qu'une simple erreur dans l'indentation peut produire un gros bogue que
et que l'analyseur syntaxique ne peut pas faire tous les contrôles
nécessaires.
Dans le langage naturel, tu l'exprime comment l'indentation (lier des
phrases qui se suivent entre elles snas conjonction de coordination) ?
Par le ton. C'est ce qui se produit avec les blocs d'instructions par
indentation en Python. Ca ne fait pas partie à prpoprement parlé du
langage (qu'il soit naturel ou artificiel). C'est "extra syntaxique".

J'espère avoir été clair pour te montrer que ce n'est pas par goût
personnel mais que c'est antinomique avec la notion de langage (surtout
formel mais pas que) mais ce n'est pas évident à expliquer sans formalisme.



Ok, la difficulté n'est donc pas du côté de l'utilisateur du langage,
mais dans son implémentation. Je préfère que ce soit de ce côté que de
l'autre.

Une petite citation, qui montre que l'idée d'utiliser l'indentation
n'est antérieure à Python, et dans de grands esprits :

We will perhaps eventually be writing only small modules which are
identified by name as they are used to build larger ones, so that
devices like indentation, rather than delimiters, might become feasible
for expressing local structure in the source language.

–Donald E. Knuth, “Structured Programming with goto Statements”,
Computing Surveys, Vol 6 No 4, Dec. 1974


--
Richard
Avatar
Richard Delorme
Le 28/08/2012 08:19, JKB a écrit :
Le Mon, 27 Aug 2012 21:27:47 +0200,
Richard Delorme écrivait :

Je comprends que l'on puisse ne pas apprécier le principe de
délimitation de blocs par l'indentation de Python, mais je le comprends
en tant qu'opinion ou goût personnel. Or là j'ai l'impression que tu as
des faits à avancer. Aussi je pose la question : En quoi est-ce nuisible
à la qualité du code et contraire aux principes du génie logiciel ?



Parce qu'il n'y a rien qui ressemble plus à une tabulation qu'une
suite d'espaces et que le résultat est catastrophique.




C'est drôle d'apprécier l'indentation au point d'indenter ses messages
dans Usenet, et de la détester dans un langage qui l'impose... ;-)

--
Richard
"Est fou celui qui cherche la logique au fond de l'âme humaine."
O'brother - frères Cohen.
Avatar
wykaaa
Le 28/08/12 18:41, Richard Delorme a écrit :
Le 28/08/2012 01:15, Wykaaa a écrit :
Richard Delorme a écrit :
Le 27/08/2012 13:08, Wykaaa a écrit :

Les langages à la syntaxe laxiste ou farfelue (je pense en
particulier à Python et ses délimitation de bloc d'instruction par
l'indentation qui est bien la chose a plus stupide que j'ai jamais vue
dans un langage de programmation, et je suis spécialiste des
langages et
des compilateurs/interpréteurs) sont nuisibles à la qualité du code et
contraires aux principes du génie logiciel (software engineering).



Je comprends que l'on puisse ne pas apprécier le principe de
délimitation de blocs par l'indentation de Python, mais je le
comprends en tant qu'opinion ou goût personnel. Or là j'ai
l'impression que tu as des faits à avancer. Aussi je pose la question
: En quoi est-ce nuisible à la qualité du code et contraire aux
principes du génie logiciel ?



Parce que l'indentation ne peut être exprimée correctement en BNF et
qu'une simple erreur dans l'indentation peut produire un gros bogue que
et que l'analyseur syntaxique ne peut pas faire tous les contrôles
nécessaires.
Dans le langage naturel, tu l'exprime comment l'indentation (lier des
phrases qui se suivent entre elles snas conjonction de coordination) ?
Par le ton. C'est ce qui se produit avec les blocs d'instructions par
indentation en Python. Ca ne fait pas partie à prpoprement parlé du
langage (qu'il soit naturel ou artificiel). C'est "extra syntaxique".

J'espère avoir été clair pour te montrer que ce n'est pas par goût
personnel mais que c'est antinomique avec la notion de langage (surtout
formel mais pas que) mais ce n'est pas évident à expliquer sans
formalisme.



Ok, la difficulté n'est donc pas du côté de l'utilisateur du langage,
mais dans son implémentation. Je préfère que ce soit de ce côté que de
l'autre.

Une petite citation, qui montre que l'idée d'utiliser l'indentation
n'est antérieure à Python, et dans de grands esprits :

We will perhaps eventually be writing only small modules which are
identified by name as they are used to build larger ones, so that
devices like indentation, rather than delimiters, might become feasible
for expressing local structure in the source language.

–Donald E. Knuth, “Structured Programming with goto Statements”,
Computing Surveys, Vol 6 No 4, Dec. 1974




Je ne me rappelais plus que Donald Knuth (que j'admire) avait émis cette
idée, qui plus est, dans un article que je connais pourtant bien (il est
vrai que c'est un long article !). D'un autre côté, on était dans les
années 70 et on ne savait pas encore tout ce que l'on sait sur les
aspects qualité du logiciel (Mac Call, ça date de 77...)
Avatar
Francois Lafont
Le 28/08/2012 19:57, wykaaa a écrit :

D'un autre côté, on était dans les
années 70 et on ne savait pas encore tout ce que l'on sait sur les
aspects qualité du logiciel (Mac Call, ça date de 77...)



Moi qui croyait que les idées de Knuth étaient atemporelles... ;-)


--
François Lafont
Avatar
Erwan David
Richard Delorme écrivait :

Le 28/08/2012 08:19, JKB a écrit :
Le Mon, 27 Aug 2012 21:27:47 +0200,
Richard Delorme écrivait :



Je comprends que l'on puisse ne pas apprécier le principe de
délimitation de blocs par l'indentation de Python, mais je le comprends
en tant qu'opinion ou goût personnel. Or là j'ai l'impression que tu as
des faits à avancer. Aussi je pose la question : En quoi est-ce nuisible
à la qualité du code et contraire aux principes du génie logiciel ?



Parce qu'il n'y a rien qui ressemble plus à une tabulation qu'une
suite d'espaces et que le résultat est catastrophique.




C'est drôle d'apprécier l'indentation au point d'indenter ses messages
dans Usenet, et de la détester dans un langage qui l'impose... ;-)



Pas qui l'impose : qui lui donne une sémantique, et différente de
l'effet visuel obtenu.

5
6

Pour moi 5 et 6 sont indentés différements, pour python ils sont
indentés de même manière...



--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
Avatar
JKB
Le Tue, 28 Aug 2012 18:49:09 +0200,
Richard Delorme écrivait :
Le 28/08/2012 08:19, JKB a écrit :
Le Mon, 27 Aug 2012 21:27:47 +0200,
Richard Delorme écrivait :



Je comprends que l'on puisse ne pas apprécier le principe de
délimitation de blocs par l'indentation de Python, mais je le comprends
en tant qu'opinion ou goût personnel. Or là j'ai l'impression que tu as
des faits à avancer. Aussi je pose la question : En quoi est-ce nuisible
à la qualité du code et contraire aux principes du génie logiciel ?



Parce qu'il n'y a rien qui ressemble plus à une tabulation qu'une
suite d'espaces et que le résultat est catastrophique.




C'est drôle d'apprécier l'indentation au point d'indenter ses messages
dans Usenet, et de la détester dans un langage qui l'impose... ;-)



C'est surtout une habitude héritée de l'Underwood (que les moins de
vingt ans ne peuvent pas connaître) avec une tabulation au début du
paragraphe et vim qui la garde pour la ligne suivante...

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
Richard Delorme
Le 28/08/2012 20:24, Erwan David a écrit :
Richard Delorme écrivait :

Le 28/08/2012 08:19, JKB a écrit :
Le Mon, 27 Aug 2012 21:27:47 +0200,
Richard Delorme écrivait :



Je comprends que l'on puisse ne pas apprécier le principe de
délimitation de blocs par l'indentation de Python, mais je le comprends
en tant qu'opinion ou goût personnel. Or là j'ai l'impression que tu as
des faits à avancer. Aussi je pose la question : En quoi est-ce nuisible
à la qualité du code et contraire aux principes du génie logiciel ?



Parce qu'il n'y a rien qui ressemble plus à une tabulation qu'une
suite d'espaces et que le résultat est catastrophique.




C'est drôle d'apprécier l'indentation au point d'indenter ses messages
dans Usenet, et de la détester dans un langage qui l'impose... ;-)



Pas qui l'impose : qui lui donne une sémantique, et différente de
l'effet visuel obtenu.

5
6

Pour moi 5 et 6 sont indentés différements, pour python ils sont
indentés de même manière...



Je ne comprends pas. On peut indenter comme on veut, mais il faut une
certaine cohérence quand même. Les deux indentations que tu montres ne
peuvent pas être présente dans le même bloc ; 5 et 6 ne sont donc pas
indentés de la même manière :

def f():






... 5
... 6
File "<stdin>", line 3
6
^
IndentationError: unexpected indent

--
Richard
4 5 6 7 8