OVH Cloud OVH Cloud

Chercher un livre sur le C avec certains critères.

200 réponses
Avatar
Francois
Bonjour à tous,

Je débute dans le C et personnellement j'apprends surtout avec les
livres. J'ai commencé "Livre du C premier langage" de Delannoy (je
précise que j'avais quand même des petites notions de programmations,
même si, à mon sens, j'étais [ et suis encore ? ] vraiment ce qu'on
appelle un débutant).

Je suis en train de lire le K&R (deuxième édition) qui est bien sûr
beaucoup plus difficile. C'est du concentré, mais quand on y regarde de
prêt, c'est quand assez précis et bien fait. Ceci étant, il y a des
choses qui ne me satisfont pas complètement.

Je trouve que ce livre à une approche trop éloignée de la machine
(comment une donnée est encodée ? comment se passe l'histoire du signed
ou unsigned du point de vue de la machine etc.). Je m'explique.

Bien sûr, le langage C est un langage abstrait de "haut niveau" qui se
doit (en principe) de ne pas faire référence à la machine. Donc c'est
normal qu'un livre sur le C ne parle pas (trop) des problèmes qui
dépendent de l'architecture. Ceci étant, j'aimerais savoir si un tel
livre existe malgré tout. Un livre qui expose le langage C et qui
n'hésite pas de temps en temps à parler de ce qui se passe dans la
machine (bien sûr, justement, ce qui se passe dépend de la machine et
n'est pas universel, mais le livre pourrait présenter les choses sur
seulement une architecture "classique" par exemple). Bon, si je pouvais
éviter les circuits électroniques et compagnie quand même, ça serait
bien. Qu'on me dise que "le complément à 2 fait que l'addition devient
plus simple pour l'ordinateur puisqu'il suffit de faire une addition
classique" me suffit amplement. Une preuve de cela en passant des
explications sur des circuits électroniques peut-être me serait un peu
indigeste.

Bref, j'espère avoir été clair sur cette sorte de compromis que je
recherche (existe-t-il ?). Vous pouvez aller voir cette discussion (où
mon pseudo est sisco)

http://www.siteduzero.com/forum-83-245206-p1-afficher-le-codage-binaire-du-contenu-d-une-variable.html

qui pourra peut-être préciser mes aspirations.

Un livre en français, ça serait le top. Mais en anglais, ça le fera aussi.


Je vous remercie d'avance pour votre aide.



François

10 réponses

Avatar
Stephane Legras-Decussy
"Jean-Marc Bourguet" a écrit dans le message de news:


An lvalue is an expression with an object type or an incomplete type other
than void.

int *p;
int *pf();
int i;

i, *p et *pf() sont trois lvalues, des trois, seul i est une variable (p
est aussi une variable, pf n'en est pas une).


symptomatique de la façon de voir la vie.

si tu me dis une variable et une lvalue c'est
pas pareil. -> j'ai envie de partir et d'abandonner le C.

si tu me dis une variable et une lvalue c'est pareil, on
verra plus tard une exception cependant...
-> là je reste et c'est cool...

Avatar
Stephane Legras-Decussy
"Michel" <nospam> a écrit dans le message de news:
47d406d8$0$21146$
Et il a combien d'années (ou décennies) d'expérience cet enfant pour
pouvoir proposer un tutorial ?!


euh... quand tu vois les types de 60 balais
qui dirigent cette planète, je crois que les
enfants ne sont pas ridicules...

Avatar
candide

Est-ce que pour eux une variable est un objet,


Par définition, mais tous les objets ne sont pas des variable.


Tiens, il vient d'y avoir une aparté dans une discussion sur clc et
Richard Heathfield considère qu'il s'agit tout simplement d'un objet, cf.

http://groups.google.fr/group/comp.lang.c/msg/2f6c25ac0ff94d24


Avatar
candide

http://groups.google.fr/group/comp.lang.c/msg/2f6c25ac0ff94d24


Plus précisément

http://groups.google.fr/group/comp.lang.c/msg/f8bde771f6e807dc

Avatar
Thierry B.
--{ Jean-Marc Bourguet a plopé ceci: }--

2) d'une lvalue


An lvalue is an expression with an object type or an incomplete type other
than void.

int *p;
int *pf();
int i;

i, *p et *pf() sont trois lvalues, des trois, seul i est une variable (p
est aussi une variable, pf n'en est pas une).


Mmmmm, dans mon esprit, etait "lvalue" tout ce qu'on peut mettre
à gauche du signe = dans le but d'y affecter une valeur. Genre un
tableau n'est pas lvalue, alors qu'une de ses cases l'est. Suis-je
donc dans l'erreur depuis 20 ans ?

D'ailleurs, le premier message d'erreur que j'ai eu en C, c'était:
foo.c:42: lvalue required.
ce qui m'avait plongé dans un immense abime de perplexité, vu que
je n'arrivais pas à trouver la réponse ni dans le K&R, ni dans la
doc du compilateur :)


--
"Il vaut mieux pomper même s'il ne se passe rien que risquer qu'il se passe
quelque chose de pire en ne pompant pas."
--{ Devise Shadok }--


Avatar
Thierry B.
--{ Stephane Legras-Decussy a plopé ceci: }--

tu sais ce que ça coûte en temps
de réécrire un simple printf() fiable ?

Je dirais au moins 42 poignées de cheveux arrachés ?



--
Une autre solution est de sauvegarder la partition contenant Windows sous un
autre Windows. Avoir deux Windows sur son micro est une sécurité au cas où le
Windows utilisé couramment se bloque complètement.
--{ MK, in fr.comp.sys.pc }--

Avatar
Jean-Marc Bourguet
"Thierry B." writes:

--{ Jean-Marc Bourguet a plopé ceci: }--

2) d'une lvalue


An lvalue is an expression with an object type or an incomplete type other
than void.

int *p;
int *pf();
int i;

i, *p et *pf() sont trois lvalues, des trois, seul i est une variable (p
est aussi une variable, pf n'en est pas une).


Mmmmm, dans mon esprit, etait "lvalue" tout ce qu'on peut mettre
à gauche du signe = dans le but d'y affecter une valeur.


C'est l'idee principale, mais les details sont parfois etranges.

Genre un tableau n'est pas lvalue, alors qu'une de ses cases
l'est. Suis-je donc dans l'erreur depuis 20 ans ?


Note: etre ou pas une lvalue, c'est une caracteristique d'une expression,
je crois que c'est relativement peu important en C ou toute expression
designant en objet est une lvalue mais en C++ on peut avoir des expressions
designant des objets qui ne sont pas pour autant des lvalues.

Je ne suis pas un specialiste de l'evolution du langage C et encore moins
de l'evolution de sa description. Antoine pourra vraisemblablement donner
plus de precisions. En C99 (et il me semble en C89 mais j'ai pas sous la
main le bouquin de l'auteur innomable), une expression de type tableau est
une lvalue mais pas une lvalue modifiable. Ca ne m'etonnerait pas que ca
ait change quelque part entre K&R1 et C89 car la notion de lvalue
modifiable ou non resulte vraisemblablement de l'introduction de const.

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
candide

Mmmmm, dans mon esprit, etait "lvalue" tout ce qu'on peut mettre
à gauche du signe = dans le but d'y affecter une valeur. Genre un
tableau n'est pas lvalue, alors qu'une de ses cases l'est. Suis-je
donc dans l'erreur depuis 20 ans ?



Oui. Horreur tout ton code s'effondre !

D'ailleurs, le premier message d'erreur que j'ai eu en C, c'était:
foo.c:42: lvalue required.
ce qui m'avait plongé dans un immense abime de perplexité, vu que
je n'arrivais pas à trouver la réponse ni dans le K&R, ni dans la
doc du compilateur :)


Le K&R ne parle de lvalue que dans son annexe et je n'y vois pas
expliqué même de façon sous-entendue qu'un tableau serait une lvalue
d'autant qu'on y lit :

------------------
The name ``lvalue'' comes from the assignment expression E1 = E2 in
which the left operand E1 must be an lvalue expression
------------------

ce qui induit en erreur tel quel.

Avatar
Jean-Marc Bourguet
candide writes:

On 9 mar, 21:14, Jean-Marc Bourguet wrote:

La norme non plus ne donne pas de définition. Mais elle n'utilise pas le
nom "variable" très souvent. Si je ne me suis pas trompé, 2 fois seulement
dans le texte normatif (donc hors exemples et notes) de C99 et toutes deux
dans la partie librairie.


Oui, j'avais déjà fait la vérification, il me semble d'ailleurs
incroyable que le mot soit utilisé dans les notes par exemple.


Il y a un tas de mots qui ne sont pas definis... Il ne faut pas non plus
prendre les normes pour ce qu'elles ne sont pas. C'est en particulier le
resultat d'un processus ou les humains faillibles sont les intervenants
principaux.

La définition classique de variable, c'est objet
nommé, donc:

Est-ce que pour eux une variable est un objet,


Par définition, mais tous les objets ne sont pas des variable.


Tu veux dire par exemple que dans

int toto;

&toto n'est pas une variable ? OK mais franchement, quel verbe est
naturellement associé au mot "variable" ? Réponse : "déclarer". Alors
c'est sûr, on ne déclare pas &toto. Ne peut-on pas dire qu'une
variable est un objet faisant l'objet (si je puis dire) d'une
déclaration ?


Ca m'a l'air d'etre equivalent.

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
Jean-Marc Bourguet
"Stephane Legras-Decussy" writes:

"Jean-Marc Bourguet" a écrit dans le message de news:

Il n'est pas précisé qu'elle est décimale... et c'est bien! La plupart des
problèmes que rencontrent les débutants -- et des moins débutants aussi --
avec les flottants sont dus au fait que les flottants ne sont pas
décimaux.
Le plus navrant, c'est qu'ils en concluent qu'il s'agit de problème de
précision (ce qui est faux, c'est un probléme de quantification).


aie aie un matheux... ;-)
je ne comprends pas un mot de ce que tu viens
d'écrire...

heureusement c'est pas génant,
ça me rappelle mon Bac C avec 5 en math et
20 en physique... :-)


C'est pourtant tres proche de notions de metrologie qu'un physicien se
devrait de maitriser :-)

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