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

1 2 3 4 5
Avatar
espie
In article <k1ac4p$j69$,
Stephane Legras-Decussy wrote:
Le 25/08/2012 10:31, Tonton Th a écrit :

Dans ce cas, pourquoi ne pas commencer dès le début
en apprenant des notions exactes ?




parce qu'on apprend pas à compter en maternelle en parlant
d'entiers naturels et de leur construction selon von neumann ...



Ouais, mais on n'y apprend pas non plus que 2+2=5...
Avatar
Stephane Legras-Decussy
Le 25/08/2012 12:04, Erwan David a écrit :
Stephane Legras-Decussy écrivait :

Le 24/08/2012 22:19, Tonton Th a écrit :


Qui contient un certain nombre d'approximations assez douteuses...




c'est mieux que d'être dégouté et d'abandonner.



EN quoi est-il plus simple de faire commencer le hello world par
int main(void) plutôt que int main() ?

Le premier est correct, le second utilisé sur le site est faux.



parce qu'il faudrait expliquer "void" qui est très compliqué quand on
est seulement à ce niveau du cours.


en pratique, cette absence de void, ça va provoquer quoi ?
Avatar
Stephane Legras-Decussy
Le 25/08/2012 13:18, Marc Espie a écrit :

Ouais, mais on n'y apprend pas non plus que 2+2=5...



quoique pour des grandes valeurs de 2, on y arrive presque...


sans rire on apprend qu'on ne peut pas faire 2-3 ... et puis
plus tard, en 5ème on apprend qu'on peut.

ça n'a jamais traumatisé personne ... si ?



plus tard on apprend qu'un carré est toujours positif... et un jour
on apprend que i^2 = -1 ...

etc etc
Avatar
espie
In article <k1adsn$n4h$,
Stephane Legras-Decussy wrote:
Le 25/08/2012 13:18, Marc Espie a écrit :

Ouais, mais on n'y apprend pas non plus que 2+2=5...



quoique pour des grandes valeurs de 2, on y arrive presque...


sans rire on apprend qu'on ne peut pas faire 2-3 ... et puis
plus tard, en 5ème on apprend qu'on peut.

ça n'a jamais traumatisé personne ... si ?



tu confonds des trucs qu'on n'apprend pas tout de suite avec des trucs
completement faux...

c'est un peu ca le probleme avec le site du zero: certains des idiomes qui
y sont enseignes sont totalement non portables de facon gratuite.

Autant ne pas rentrer trop dans les details, je comprend, autant remplacer
du code correct et pas plus complique par du code qui ne marche que sur
certaines machines, c'est un peu cretin...
Avatar
espie
In article <k1acl4$k9h$,
Stephane Legras-Decussy wrote:
Le 25/08/2012 12:04, Erwan David a écrit :
Stephane Legras-Decussy écrivait :

Le 24/08/2012 22:19, Tonton Th a écrit :


Qui contient un certain nombre d'approximations assez douteuses...




c'est mieux que d'être dégouté et d'abandonner.



EN quoi est-il plus simple de faire commencer le hello world par
int main(void) plutôt que int main() ?

Le premier est correct, le second utilisé sur le site est faux.



parce qu'il faudrait expliquer "void" qui est très compliqué quand on
est seulement à ce niveau du cours.



Mais n'importe quoi. Suffit de dire qu'on met void (rien) pour bien indiquer
que la fonction n'a pas de parametres. Pas besoin d'aller plus loin dans
les explications !

Ouh, que c'est complique !
Avatar
Erwan David
Stephane Legras-Decussy écrivait :

Le 25/08/2012 12:04, Erwan David a écrit :
Stephane Legras-Decussy écrivait :

Le 24/08/2012 22:19, Tonton Th a écrit :


Qui contient un certain nombre d'approximations assez douteuses...




c'est mieux que d'être dégouté et d'abandonner.



EN quoi est-il plus simple de faire commencer le hello world par
int main(void) plutôt que int main() ?

Le premier est correct, le second utilisé sur le site est faux.



parce qu'il faudrait expliquer "void" qui est très compliqué quand on
est seulement à ce niveau du cours.



Mais non, on dit void c'est pour dire qu'il n'y a pas d'arguments.


en pratique, cette absence de void, ça va provoquer quoi ?




Que certains compilateurs vont refuser le programme. et alors "pourquoi
ça marche pas chez moi ?" va être nettement plus compliqué à expliquer.

--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
Avatar
Alexandre Bacquart
On 08/25/2012 08:34 AM, Pascal06 wrote:
Déjà qu'à la base je ne comprends l'utilité de ces satanés ";" en fin
de ligne ! On est plus en 1960 !



Précisément. C'est la raison pour laquelle il a été décidé en C (début
des années 1970) d'en finir avec l'antique paradigme de la fin de ligne
séparateur d'instructions (encore qu'il me semble que C ne soit pas le
premier à avoir introduit cette notion).

Étant donné que tu n'as jamais fait que du BASIC (ou de l'assembleur),
il n'est pas étonnant que cela te dérange. BASIC a d'ailleurs persisté
avec l'ancien paradigme jusqu'à plus soif !

La vérité, c'est qu'utiliser un symbole (';' en l'occurrence) comme
séparateur d'instructions permet au programmeur de formater son code
comme il l'entend :

int main(void)
{
printf("Hello, World!n");
return 0;
}

peut tout aussi bien s'écrire :

int main(void) { printf("Hello, World!n"); return 0; }

ou encore :

int
main(void) {
printf("Hello, "
"World!"
"n")
;
return
0; }

Approuvé par n'importe quel compilateur C saint d'esprit. C'est tout de
suite plus flexible. La fin de ligne est traitée comme n'importe quel
caractère white-space (espace, tabulation, FF, etc...).

Seule exception à la règle, le préprocesseur :

#define SEED 42

où là, effectivement, la fin de ligne signale la fin de l'instruction.
Règle qu'on peut d'ailleurs outrepasser avec '' :

#define SEED
42


--
Alexandre
Avatar
Alexandre Bacquart
On 08/24/2012 11:25 PM, Pascal06 wrote:
On Aug 24, 8:56 pm, Stephane Legras-Decussy
wrote:
Le 24/08/2012 09:31, a crit :



alors si d ja confront au C tu as t rebut , je ne conseille
pas le K&R qui est exact, rigoureux et ... rebutant.





Exact et rigoureux sont loin d'être des adjectifs... rebutants pour un
tel langage.

il faut un bouquin d'approche sympathique pour ne pas tre
d gout et pour *s'amuser*





Il ne me semble pas que l'OP ait beaucoup envie de s'amuser. Ça tombe
bien d'ailleurs, les compilateurs C manquent cruellement d'humour.

une fois qu'on a exp riment quelque chose et vu que a marchait, on
peut relire ce qu'en dit le K&R pour avoir les subtilit s.

en fait pas besoin de bouquin, ce cours en ligne est excellent et le
taux d'erreur est tr s bon ...

http://www.siteduzero.com/tutoriel-3-14189-apprenez-a-programmer-en-c...

en orient microcontroleur, ce qui est mon cr neau aussi, je te
conseille les controleurs Atmel et l'outil de dev fourni ...



Bonsoir,
Merci pour ce conseil...



Mouais, bon.

J'ai effectivement regardé le site du "0", j'ai meme imprimé le
bouquin...



Diantre, au prix des cartouches d'encre !

Sinon, heu... un tutoriel, ce n'est pas un bouquin.

Mais je me suis presque fait incendié (sur fr.sci.electronique) en
parlant de ça !
D'ou ma question ici...



Huhuhu ! J'ai vu le troll venir dès ton tout premier post, mais c'est
pas ta faute. Le sujet du "bouquin pour apprendre le C" est assez
fameux. Il revient à peu près... une fois par an. Et à chaque fois c'est
la même rengaine, à savoir :

1. L'indétrônable et incontournable K&R. Peu pédagogique et patati et
patata, c'est vrai. Mais une très bonne référence (autrement dit : pas
blindé d'erreurs). Cela tient en grande partie au fait que les auteurs
originaux sont aussi les auteurs du langage, et aussi que ce bouquin a
été pendant plus de 10 ans... la seule et unique référence (il précède
la première normalisation d'autant). Ces 2 arguments ne sont toutefois
pas une raison suffisante pour en faire un bon livre pédagogique. Créer
des langages, écrire des bouquins et enseigner sont 3 activités bien
différentes.

Un autre problème du K&R, c'est que malgré les ré-éditions, il n'est pas
très à jour avec les dernières normes et pas du tout avec la dernière en
date, à savoir celle de 2011 (C11, mais à ce niveau, je serais étonné
qu'il existe un bouquin quelconque). La précédente norme date de 1999
(C99) et même celle-là, il me semble que la dernière édition du K&R
français (2004) n'en parle pas (quant au K&R anglais, la dernière
édition date de... 1988 ! autrement dit, la dernière édition anglophone
date d'avant la première normalisation).

Est-ce que c'est si grave ? Pas vraiment en fait. La norme ne change
plus tellement au point de rendre le K&R obsolète. Le monde de C évolue
assez lentement (une révision de la norme tous les 10 ans ~). La norme
C11 est en fait un bébé tout beau tout neuf et encore assez peu
exploitée. Les programmeurs C ne sont pas du genre sur les
starting-blocks mais plutôt dans les gradins à regarder les plus
téméraires se casser la gueule avec un certain amusement (faut bien
qu'ils rigolent un peu parfois). Ils sont peu enclins à adopter les
nouveautés tant qu'elles n'ont pas vraiment fait leur preuves. Ce genre
de choses prend du temps.

Sinon, il y a aussi le "Harbison & Steele" assez souvent cité, mais je
ne le connais pas. Cependant, je ne me souviens pas avoir lu de
critiques négatives à son sujet, c'est sûrement qu'il doit valoir
quelque-chose. On dit qu'il est plus à jour que le K&R vis à vis des
dernières "nouveautés" de C (ce qui n'est pas un exploit vous me direz).


2. Le site du zéro (ou n'importe quel autre
"tuto-kikoo-lol-apprend-C-en-3-minutes").

Pour que tu comprennes bien la situation (rapport aux émeutes que tu
déclenches en en parlant). Chaque année on y a droit au site du zéro !
Oui, même ici sur les terres sacrées de f.c.l.c. Donc on ne peut pas y
échapper, quoiqu'on en dise, qu'on le descende, qu'on l'allume, qu'on
l'atomise, qu'on l'éjecte sur Mars à coup de pied au cul... il y a
toujours, *TOUJOURS* un martien qui débarque pour nous le revendre. Et
dans la foulée, un élu local intervient, en substance : "c'est très
mauvais et blablabla". Systématique.

Il suffit d'ailleurs de taper "language C" dans le moteur que tout le
monde connaît pour comprendre que c'est de toute évidence LA référence
francophone pour s'initier au C sur le réseau de réseaux.

L'explication des émeutes, c'est que s'il existe un langage qui n'est
pas fait pour les débutants, c'est bien C. Non pas qu'il soit si
difficile à aborder, mais il demande en principe des années pour être
maîtrisé. C'est un langage système, il t'ouvre toutes les portes y
compris celle de la pièce avec un gros bouton rouge.

D'autre part, le temps passant et les paradigmes de programmation ayant
quelque peu évolué, on peut dire que certaines pratiques courantes en C
sont assez passées de mode. Sa bibliothèque standard expose encore des
fonctions qui auraient dû être reléguées aux oubliettes depuis la nuit
des temps (voire n'auraient jamais dû exister, comme le machiavélique et
néanmoins si séduisant gets(), pour ne citer que lui). C a aussi une
fâcheuse tendance à donner de mauvaises habitudes un peu gênantes quand
on passe à d'autres langages (et pas que C++).

Tout ceci est totalement incompatible avec le concept de tutoriel qui
fait figure de chien dans un jeu de quilles. Voilà pour les rires,
quolibets, voire émeutes d'experts. Ici, comme les rares endroits où
l'on peut trouver des experts en C, tu auras à peu près le même genre de
réactions : "Hé ho ! On parle de l'illustre et infâme C bordel ! Faut
arrêter la déconne là hein !". Bon, ils seront moins grossiers, mais le
coeur y sera. C'est un sujet de choix pour des enfilades interminables
(et non-terminées). D'ailleurs, comme tu peux le constater, ça a déjà
commencé (mais c'est bien, ça met un peu d'ambiance dans ces lieux
poussiéreux).

Mon avis (tout à fait personnel), c'est qu'au fond, on a beau être un
vieux de la vieille du C pour qui les tutoriels sur ce langage ne sont
rien d'autre que des attrapes nigauds d'une médiocrité sans nom, ce
tutoriel là n'est pas aussi mauvais que ceux qui ne prennent pas
toujours la peine d'y jeter leur oeil averti veulent bien le faire
croire. Certes, un puriste y trouvera toujours quelque-chose à redire,
mais il ne s'y attardera guère non plus (étant à priori expert, il n'a
pas besoin de tutoriel, lui). Cependant il faut rester honnête : il y a
plusieurs tutoriels en français sur le net pour le C, aussi hérétique
que ce concept puisse paraître. Et celui-là est peut être bien le
meilleur d'entre tous. Car si les grands-sages-experts ici bas le
descendront avec une facilité déconcertante, dans les faits ils auront
beaucoup de difficultés à te proposer mieux.

Bref, plus on connaît le C, plus l'idée de tutoriel est contre-nature.


3. Le site d'Emmanuel (http://www.bien-programmer.fr/index.php). Ce
n'est pas un vulgaire tutoriel et on y apprend pas à faire des trucs
rigolos dès le premier programme, certes. Ça manque cruellement
d'empathie pour le pauvre débutant, certes (c'est pas dans la nature du
personnage ;)). Mais après tout on est pas là pour rigoler. C'est
surtout assez formel, précis et *correct* (ce qui est rare) et plein de
bon conseils pour éviter les mauvaises habitudes. Et il y a quand-même
une initiation. Et en français.

Petit message pour Emmanuel : tu devrais peut-être lancer un appel à
cotisations pour le référencement de ton site... enfin bon, vu les news,
peut-être que tu t'en fous et que tu préfères sévir sur developpez.com
jusqu'à nouvel ordre :)


4. f.c.l.c : le forum ici présent. C'est vrai qu'il a l'air mort le
bled, mais c'est un leurre pour tromper l'ennemi. Tous les grabataires
francophones experts du C sont là, tapis dans l'ombre, prêts à bondir
sur le premier semi-débutant qui aurait l'audace de répondre une
connerie à la moindre question (et même ceux qui répondent bien de toute
façons, ils trouvent toujours une bonne raison de contredire un truc,
aussi sûr qu'un bon vieux compilo qui te les brise pour un bête
point-virgule oublié). Ne *jamais* hésiter à poser des questions de
parfait débutant ici. Même souvent... ça risques pas de saouler, au
contraire, ça mettra un peu de vie dans cette pension de retraite !


5. Pour finir, les plus mauvais tutoriels qui soient pour s'initier au
C, les normes ISO (enfin les derniers drafts du pauvre plutôt) :

C99
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf

C11
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

Un bon moyen pour dégouter le petit frère qui te fait de l'ombre.



--
Alexandre
Avatar
espie
In article <50390241$0$16477$,
Alexandre Bacquart wrote:
Le monde de C évolue assez lentement (une révision de la norme
tous les 10 ans ~).



Ca, ca veut rien dire. Le 'une revision toutes les dix ans', c'est le
principe pour tous les langages normalises par l'ISO, que ce soit C,
Fortran, ou C++.

Ces deux-la ont bouge bien plus que C !

Typiquement, il y a eu un gros blocage sur fortran, suivi par un putsch
qui a donne d'enormes modifs vers 2000.

Quant a C++, la norme 2011 revolutionne totalement les usages du langage
par rapport a C++98...

(je laisse quelqu'un de plus feru nous dire ce qu'il en est de common-lisp...)
Avatar
Jean-Marc Bourguet
Erwan David writes:

Stephane Legras-Decussy écrivait :

Le 24/08/2012 22:19, Tonton Th a écrit :


Qui contient un certain nombre d'approximations assez douteuses...




c'est mieux que d'être dégouté et d'abandonner.



EN quoi est-il plus simple de faire commencer le hello world par
int main(void) plutôt que int main() ?

Le premier est correct, le second utilisé sur le site est faux.



Référence, SVP.

Je préfère la première forme, mais dire que la seconde est fausse c'est
aller un peu loin.

Pour moi, le premier définit main comme une fonction retournant un int et
sans paramètre et la déclare de la même manière, la seconde définit main
comme une fonction retournant un int et sans paramètre mais la déclare
comme une fonction retournant un int avec des paramètres non spécifié. Ça
ne fait une différence que dans le cadre de l'IOCCC quand on appelle main
de manière récursive, si on appelle main avec des paramètres, ça ne doit
pas compiler dans le premier cas, ça doit dans le second, mais l'exécution
est un comportement indéfini.


En passant, je vous rappelle que même dans la seconde édition de K&R, c'est
simplement

main()
{
}

avec des fonctions qui sont parfois déclarées à l'intérieur des fonctions
qui les appellent.

A+

--
Jean-Marc
FAQ de fclc: http://www.levenez.com/lang/c/faq
Site de usenet-fr: http://www.usenet-fr.news.eu.org
1 2 3 4 5