Chercher un livre sur le C avec certains critères.
200 réponses
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)
Non, je redis mon propos: les variables globales sont des *paramètres* cachés (les variables elles même ne sont pas cachées: on les trouve vite, la question est de savoir qui les utilise).
Je ne comprends pas. Ce que tu dis au sujet des variables globales, me parait tout aussi valable pour une fonction. "les XXXXX elles même ne sont pas cachées: on les trouve vite, la question est de savoir qui les utilise".
Tout à fait. Sauf qu'une fonction ne manipule que les paramètres qu'on lui fournit (plus les variables globales).
Oui, évidement.
Mais si l'on conçoit que une variable globale peut être utiliser à mauvais escient, le danger est tout aussi grand dans l'utilisation à mauvais escient d'une fonction.
Oui, utiliser une variable globale présente un risque, comme une fonction, comme un pointeur.
Les variables globales ont leurs avantages et leurs inconvénients. Les utiliser à bon escient, cela est possible aussi, dans la limite de leurs possibilités.
Je comprend ces restrictions exagérées de cette manière : - un néophyte aura plutôt tendance à utiliser des variables globale à tout va, ... qui vont l'amener dans le mur. - il faut "l'inciter" à utiliser autre chose que seulement ces variables globales.
Mais de la en faire un *dogme* !
"Marc Boyer" <Marc.Boyer@enseeiht.yahoo.fr.invalid> a écrit dans le message
de news: slrnftsp3l.mbc.Marc.Boyer@ubu.enseeiht.fr...
Non, je redis mon propos: les variables globales sont des *paramètres*
cachés (les variables elles même ne sont pas cachées: on les trouve
vite, la question est de savoir qui les utilise).
Je ne comprends pas. Ce que tu dis au sujet des variables globales, me
parait tout aussi valable pour une fonction.
"les XXXXX elles même ne sont pas cachées: on les trouve vite, la
question
est de savoir qui les utilise".
Tout à fait.
Sauf qu'une fonction ne manipule que les paramètres qu'on lui
fournit (plus les variables globales).
Oui, évidement.
Mais si l'on conçoit que une variable globale peut être utiliser à mauvais
escient, le danger est tout aussi grand dans l'utilisation à mauvais escient
d'une fonction.
Oui, utiliser une variable globale présente un risque, comme une fonction,
comme un pointeur.
Les variables globales ont leurs avantages et leurs inconvénients.
Les utiliser à bon escient, cela est possible aussi, dans la limite de leurs
possibilités.
Je comprend ces restrictions exagérées de cette manière :
- un néophyte aura plutôt tendance à utiliser des variables globale à
tout va, ... qui vont l'amener dans le mur.
- il faut "l'inciter" à utiliser autre chose que seulement ces variables
globales.
Non, je redis mon propos: les variables globales sont des *paramètres* cachés (les variables elles même ne sont pas cachées: on les trouve vite, la question est de savoir qui les utilise).
Je ne comprends pas. Ce que tu dis au sujet des variables globales, me parait tout aussi valable pour une fonction. "les XXXXX elles même ne sont pas cachées: on les trouve vite, la question est de savoir qui les utilise".
Tout à fait. Sauf qu'une fonction ne manipule que les paramètres qu'on lui fournit (plus les variables globales).
Oui, évidement.
Mais si l'on conçoit que une variable globale peut être utiliser à mauvais escient, le danger est tout aussi grand dans l'utilisation à mauvais escient d'une fonction.
Oui, utiliser une variable globale présente un risque, comme une fonction, comme un pointeur.
Les variables globales ont leurs avantages et leurs inconvénients. Les utiliser à bon escient, cela est possible aussi, dans la limite de leurs possibilités.
Je comprend ces restrictions exagérées de cette manière : - un néophyte aura plutôt tendance à utiliser des variables globale à tout va, ... qui vont l'amener dans le mur. - il faut "l'inciter" à utiliser autre chose que seulement ces variables globales.
Mais de la en faire un *dogme* !
Marc Boyer
On 2008-03-17, Ael Rowen Terence wrote:
"Marc Boyer" a écrit dans le message de news:
Non, je redis mon propos: les variables globales sont des *paramètres* cachés (les variables elles même ne sont pas cachées: on les trouve vite, la question est de savoir qui les utilise).
Je ne comprends pas. Ce que tu dis au sujet des variables globales, me parait tout aussi valable pour une fonction. "les XXXXX elles même ne sont pas cachées: on les trouve vite, la question est de savoir qui les utilise".
Tout à fait. Sauf qu'une fonction ne manipule que les paramètres qu'on lui fournit (plus les variables globales).
Mais si l'on conçoit que une variable globale peut être utiliser à mauvais escient, le danger est tout aussi grand dans l'utilisation à mauvais escient d'une fonction.
Sauf qu'une fonction, elle ne te permet pas de tout faire. Prenons un distributeur d'ID simpliste, qui attibue des entiers à qui en demande, et qui incrémente le numéro à chaque fois. Si j'offre int getNewId(void); je n'interdis pas la copie, mais j'évite que quelqu'un remette le compteur à 0 ou oublie d'incrémenter.
Avec une fonction, celui qui écrit le code pense aussi les usages, et celui qui utilise s'y plie. Pas avec une variable globale.
Oui, utiliser une variable globale présente un risque, comme une fonction, comme un pointeur.
On peut aussi effacer des fichiers avec fopen.
Les variables globales ont leurs avantages et leurs inconvénients. Les utiliser à bon escient, cela est possible aussi, dans la limite de leurs possibilités.
Bien sûr.
Je comprend ces restrictions exagérées de cette manière : - un néophyte aura plutôt tendance à utiliser des variables globale à tout va, ... qui vont l'amener dans le mur.
oui
- il faut "l'inciter" à utiliser autre chose que seulement ces variables globales.
Mais de la en faire un *dogme* !
Mais qui en a fait un dogme ? Qui parle de "diaboliser" d'ailleurs ? Je dis juste que pour utiliser des variables globales, il faut avoir soupesé les avantages et inconvénients (et être compétent pour le faire). C'est comme l'utilisation des flottants dans les calculs (autre polémique).
Marc Boyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. André Maurois)
On 2008-03-17, Ael Rowen Terence <Sans.Reponse@mail.fr> wrote:
"Marc Boyer" <Marc.Boyer@enseeiht.yahoo.fr.invalid> a écrit dans le message
de news: slrnftsp3l.mbc.Marc.Boyer@ubu.enseeiht.fr...
Non, je redis mon propos: les variables globales sont des *paramètres*
cachés (les variables elles même ne sont pas cachées: on les trouve
vite, la question est de savoir qui les utilise).
Je ne comprends pas. Ce que tu dis au sujet des variables globales, me
parait tout aussi valable pour une fonction.
"les XXXXX elles même ne sont pas cachées: on les trouve vite, la
question
est de savoir qui les utilise".
Tout à fait.
Sauf qu'une fonction ne manipule que les paramètres qu'on lui
fournit (plus les variables globales).
Mais si l'on conçoit que une variable globale peut être utiliser à mauvais
escient, le danger est tout aussi grand dans l'utilisation à mauvais escient
d'une fonction.
Sauf qu'une fonction, elle ne te permet pas de tout faire. Prenons un
distributeur d'ID simpliste, qui attibue des entiers à qui en demande,
et qui incrémente le numéro à chaque fois. Si j'offre
int getNewId(void);
je n'interdis pas la copie, mais j'évite que quelqu'un remette le
compteur à 0 ou oublie d'incrémenter.
Avec une fonction, celui qui écrit le code pense aussi les usages,
et celui qui utilise s'y plie. Pas avec une variable globale.
Oui, utiliser une variable globale présente un risque, comme une fonction,
comme un pointeur.
On peut aussi effacer des fichiers avec fopen.
Les variables globales ont leurs avantages et leurs inconvénients.
Les utiliser à bon escient, cela est possible aussi, dans la limite de leurs
possibilités.
Bien sûr.
Je comprend ces restrictions exagérées de cette manière :
- un néophyte aura plutôt tendance à utiliser des variables globale à
tout va, ... qui vont l'amener dans le mur.
oui
- il faut "l'inciter" à utiliser autre chose que seulement ces variables
globales.
Mais de la en faire un *dogme* !
Mais qui en a fait un dogme ? Qui parle de "diaboliser" d'ailleurs ?
Je dis juste que pour utiliser des variables globales, il faut avoir
soupesé les avantages et inconvénients (et être compétent pour le
faire).
C'est comme l'utilisation des flottants dans les calculs (autre
polémique).
Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)
Non, je redis mon propos: les variables globales sont des *paramètres* cachés (les variables elles même ne sont pas cachées: on les trouve vite, la question est de savoir qui les utilise).
Je ne comprends pas. Ce que tu dis au sujet des variables globales, me parait tout aussi valable pour une fonction. "les XXXXX elles même ne sont pas cachées: on les trouve vite, la question est de savoir qui les utilise".
Tout à fait. Sauf qu'une fonction ne manipule que les paramètres qu'on lui fournit (plus les variables globales).
Mais si l'on conçoit que une variable globale peut être utiliser à mauvais escient, le danger est tout aussi grand dans l'utilisation à mauvais escient d'une fonction.
Sauf qu'une fonction, elle ne te permet pas de tout faire. Prenons un distributeur d'ID simpliste, qui attibue des entiers à qui en demande, et qui incrémente le numéro à chaque fois. Si j'offre int getNewId(void); je n'interdis pas la copie, mais j'évite que quelqu'un remette le compteur à 0 ou oublie d'incrémenter.
Avec une fonction, celui qui écrit le code pense aussi les usages, et celui qui utilise s'y plie. Pas avec une variable globale.
Oui, utiliser une variable globale présente un risque, comme une fonction, comme un pointeur.
On peut aussi effacer des fichiers avec fopen.
Les variables globales ont leurs avantages et leurs inconvénients. Les utiliser à bon escient, cela est possible aussi, dans la limite de leurs possibilités.
Bien sûr.
Je comprend ces restrictions exagérées de cette manière : - un néophyte aura plutôt tendance à utiliser des variables globale à tout va, ... qui vont l'amener dans le mur.
oui
- il faut "l'inciter" à utiliser autre chose que seulement ces variables globales.
Mais de la en faire un *dogme* !
Mais qui en a fait un dogme ? Qui parle de "diaboliser" d'ailleurs ? Je dis juste que pour utiliser des variables globales, il faut avoir soupesé les avantages et inconvénients (et être compétent pour le faire). C'est comme l'utilisation des flottants dans les calculs (autre polémique).
Marc Boyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. André Maurois)
Ael Rowen Terence
"Marc Boyer" a écrit dans le message de news:
On 2008-03-17, Ael Rowen Terence wrote:
Mais de la en faire un *dogme* !
Mais qui en a fait un dogme ? Qui parle de "diaboliser" d'ailleurs ? Je dis juste que pour utiliser des variables globales, il faut avoir soupesé les avantages et inconvénients (et être compétent pour le faire).
Oups, me serais-je laisser emporter ? C'est bien possible, vu la longueur de ce fil je me sens pas de le relire pour déceler le moment où j'ai les neurones qui se sont emberlificotés.
Puisque nous avons le même avis, c'est parfait. J'espère ne pas t'avoir froissé.
"Marc Boyer" <Marc.Boyer@enseeiht.yahoo.fr.invalid> a écrit dans le message
de news: slrnftsvhd.mbc.Marc.Boyer@ubu.enseeiht.fr...
On 2008-03-17, Ael Rowen Terence <Sans.Reponse@mail.fr> wrote:
Mais de la en faire un *dogme* !
Mais qui en a fait un dogme ? Qui parle de "diaboliser" d'ailleurs ?
Je dis juste que pour utiliser des variables globales, il faut avoir
soupesé les avantages et inconvénients (et être compétent pour le
faire).
Oups, me serais-je laisser emporter ?
C'est bien possible, vu la longueur de ce fil je me sens pas de le relire
pour déceler le moment où j'ai les neurones qui se sont emberlificotés.
Puisque nous avons le même avis, c'est parfait.
J'espère ne pas t'avoir froissé.
Mais qui en a fait un dogme ? Qui parle de "diaboliser" d'ailleurs ? Je dis juste que pour utiliser des variables globales, il faut avoir soupesé les avantages et inconvénients (et être compétent pour le faire).
Oups, me serais-je laisser emporter ? C'est bien possible, vu la longueur de ce fil je me sens pas de le relire pour déceler le moment où j'ai les neurones qui se sont emberlificotés.
Puisque nous avons le même avis, c'est parfait. J'espère ne pas t'avoir froissé.
Antoine Leca
En news:, candide va escriure:
Ce que je dis c'est que la réalité n'est pas conforme à ce que vous racontez
ÀMHA, si.
et que dans le code source que je regarde pour me former, je vois tout le temps des variables globales, y compris sur des projets qui ne sont pas de petits projets,
Et oui. Mais nous ne parlons pas de ce que l'on a fait, nous parlons de ce que l'on devrait faire. Comme dirait l'autre, l'expérience c'est apprendre de ses erreurs, ce n'est pas ne jamais en avoir fait (cela ce serait être un génie, et peu de gens ici y prétendent.)
Si tu _participes_ à l'un des projets où abondent paraît-il les variables globales, il est probable que tu voies assez rapidement arriver des sous-projets chargés... d'éradiquer telle ou telle variable globale, généralement en l'englobant dans un type anonyme que l'on trimbale ensuite via un pointeur de fonction en fonction. Pour info, en C le premier de ces types se nomme FILE.
On peut aussi observer cela en comparant les prototypes (signatures) des fonctions sur moyenne période : les noms des fonctions sont en général assez stables, nettement plus que les prototypes : mais parmi les causes d'instabilité, l'ajout d'un paramètre supplémentaire contenant un type anonyme me paraît une cause fréquente ; au point que certains théoriciens en ont dérivé la programmation orientée-objet !
Sur plus longue période, une autre évolution majeure à remarquer est la façon de passer les chaînes de caractères : si historiquement on a trouvé des pointeurs char* « suffisament grands » (!), puis des pointeurs vers des char[N] où N est un nombre magique défini au mieux dans un en-tête, on a ensuite vu arriver beaucoup de chaînes allouées à libérer par l'appelant (genre strdup) ; et j'ai l'impression qu'aujourd'hui on voit plutôt deux paramètres, un pointeur vers void* accompagné d'un size_t qui précise la taille maximale du tampon : ce qui n'est pas encore génial car le comportement en cas de débordement n'est pas complètement clair.
Évidemement, c'est typiquement le sujet sur lequel un projet va définir une _norme_ à suivre. Et bien, ma faible expérience de ce genre de normes est qu'elles insistent souvent sur la suppression des variables globales...
Antoine
En news:c8f3ff79-bf60-4d27-827b-eff7393bb71b@8g2000hsu.googlegroups.com,
candide va escriure:
Ce que je dis c'est que la réalité n'est pas conforme à
ce que vous racontez
ÀMHA, si.
et que dans le code source que je regarde pour me former,
je vois tout le temps des variables globales, y compris sur
des projets qui ne sont pas de petits projets,
Et oui. Mais nous ne parlons pas de ce que l'on a fait, nous parlons de ce
que l'on devrait faire. Comme dirait l'autre, l'expérience c'est apprendre
de ses erreurs, ce n'est pas ne jamais en avoir fait (cela ce serait être un
génie, et peu de gens ici y prétendent.)
Si tu _participes_ à l'un des projets où abondent paraît-il les variables
globales, il est probable que tu voies assez rapidement arriver des
sous-projets chargés... d'éradiquer telle ou telle variable globale,
généralement en l'englobant dans un type anonyme que l'on trimbale ensuite
via un pointeur de fonction en fonction.
Pour info, en C le premier de ces types se nomme FILE.
On peut aussi observer cela en comparant les prototypes (signatures) des
fonctions sur moyenne période : les noms des fonctions sont en général assez
stables, nettement plus que les prototypes : mais parmi les causes
d'instabilité, l'ajout d'un paramètre supplémentaire contenant un type
anonyme me paraît une cause fréquente ; au point que certains théoriciens en
ont dérivé la programmation orientée-objet !
Sur plus longue période, une autre évolution majeure à remarquer est la
façon de passer les chaînes de caractères : si historiquement on a trouvé
des pointeurs char* « suffisament grands » (!), puis des pointeurs vers des
char[N] où N est un nombre magique défini au mieux dans un en-tête, on a
ensuite vu arriver beaucoup de chaînes allouées à libérer par l'appelant
(genre strdup) ; et j'ai l'impression qu'aujourd'hui on voit plutôt deux
paramètres, un pointeur vers void* accompagné d'un size_t qui précise la
taille maximale du tampon : ce qui n'est pas encore génial car le
comportement en cas de débordement n'est pas complètement clair.
Évidemement, c'est typiquement le sujet sur lequel un projet va définir une
_norme_ à suivre. Et bien, ma faible expérience de ce genre de normes est
qu'elles insistent souvent sur la suppression des variables globales...
Ce que je dis c'est que la réalité n'est pas conforme à ce que vous racontez
ÀMHA, si.
et que dans le code source que je regarde pour me former, je vois tout le temps des variables globales, y compris sur des projets qui ne sont pas de petits projets,
Et oui. Mais nous ne parlons pas de ce que l'on a fait, nous parlons de ce que l'on devrait faire. Comme dirait l'autre, l'expérience c'est apprendre de ses erreurs, ce n'est pas ne jamais en avoir fait (cela ce serait être un génie, et peu de gens ici y prétendent.)
Si tu _participes_ à l'un des projets où abondent paraît-il les variables globales, il est probable que tu voies assez rapidement arriver des sous-projets chargés... d'éradiquer telle ou telle variable globale, généralement en l'englobant dans un type anonyme que l'on trimbale ensuite via un pointeur de fonction en fonction. Pour info, en C le premier de ces types se nomme FILE.
On peut aussi observer cela en comparant les prototypes (signatures) des fonctions sur moyenne période : les noms des fonctions sont en général assez stables, nettement plus que les prototypes : mais parmi les causes d'instabilité, l'ajout d'un paramètre supplémentaire contenant un type anonyme me paraît une cause fréquente ; au point que certains théoriciens en ont dérivé la programmation orientée-objet !
Sur plus longue période, une autre évolution majeure à remarquer est la façon de passer les chaînes de caractères : si historiquement on a trouvé des pointeurs char* « suffisament grands » (!), puis des pointeurs vers des char[N] où N est un nombre magique défini au mieux dans un en-tête, on a ensuite vu arriver beaucoup de chaînes allouées à libérer par l'appelant (genre strdup) ; et j'ai l'impression qu'aujourd'hui on voit plutôt deux paramètres, un pointeur vers void* accompagné d'un size_t qui précise la taille maximale du tampon : ce qui n'est pas encore génial car le comportement en cas de débordement n'est pas complètement clair.
Évidemement, c'est typiquement le sujet sur lequel un projet va définir une _norme_ à suivre. Et bien, ma faible expérience de ce genre de normes est qu'elles insistent souvent sur la suppression des variables globales...
Antoine
espie
In article <frmaoc$rdi$, Antoine Leca wrote:
Si tu _participes_ à l'un des projets où abondent paraît-il les variables globales, il est probable que tu voies assez rapidement arriver des sous-projets chargés... d'éradiquer telle ou telle variable globale, généralement en l'englobant dans un type anonyme que l'on trimbale ensuite via un pointeur de fonction en fonction. Pour info, en C le premier de ces types se nomme FILE.
Euh bof... pour exemple de truc propre, FILE, on repassera.
Surtout que stdin, stdout et stderr, comme trucs qui sont `presque' des variables globales, mais pas forcement, c'est tres tres beurk.
Cote FILE: - on sait meme pas ce que c'est en vrai (une struct ? autre chose ?) - il faut inclure stdio.h et on se recupere la definition, avec toutes les cochonneries non visibles qu'il y a dedans.
En particulier, c'est impossible de faire des fonctions qui contiennent des FILE * en parametre qui ne font `que passer' sans avoir a inclure stdio.h (et tu ne peux meme pas mettre un FILE * dans une structure sans inclure stdio.h).
Dans des OS bien connus, a chaque fois qu'il faut changer les E/s dans la bibliotheque standard, FILE fout le bordel, et pas qu'un peu en general... (bon, faut dire que j'ai deja vu des bouts de bibliotheque, xview pour ne pas la nommer, definir `a la main' un FILE (pas un FILE *, hein) juste pour avoir sa version a elle de sprintf... (et apache fait pareil en version 1).
La ou c'est drole (ou pas), c'est que je ne connais pas une seule implementation ou FILE n'est pas, in fine, une struct...
Si ca s'appelait struct FILE, ca aurait bien simplifie la vie a plein de gens...
C'est un des points ou C++ est mieux foutu, entre autres grace a iosfwd.
In article <frmaoc$rdi$1@shakotay.alphanet.ch>,
Antoine Leca <root@localhost.invalid> wrote:
Si tu _participes_ à l'un des projets où abondent paraît-il les variables
globales, il est probable que tu voies assez rapidement arriver des
sous-projets chargés... d'éradiquer telle ou telle variable globale,
généralement en l'englobant dans un type anonyme que l'on trimbale ensuite
via un pointeur de fonction en fonction.
Pour info, en C le premier de ces types se nomme FILE.
Euh bof... pour exemple de truc propre, FILE, on repassera.
Surtout que stdin, stdout et stderr, comme trucs qui sont `presque' des
variables globales, mais pas forcement, c'est tres tres beurk.
Cote FILE:
- on sait meme pas ce que c'est en vrai (une struct ? autre chose ?)
- il faut inclure stdio.h et on se recupere la definition, avec toutes
les cochonneries non visibles qu'il y a dedans.
En particulier, c'est impossible de faire des fonctions qui contiennent
des FILE * en parametre qui ne font `que passer' sans avoir a inclure
stdio.h (et tu ne peux meme pas mettre un FILE * dans une structure sans
inclure stdio.h).
Dans des OS bien connus, a chaque fois qu'il faut changer les E/s dans la
bibliotheque standard, FILE fout le bordel, et pas qu'un peu en general...
(bon, faut dire que j'ai deja vu des bouts de bibliotheque, xview pour ne
pas la nommer, definir `a la main' un FILE (pas un FILE *, hein) juste pour
avoir sa version a elle de sprintf...
(et apache fait pareil en version 1).
La ou c'est drole (ou pas), c'est que je ne connais pas une seule implementation
ou FILE n'est pas, in fine, une struct...
Si ca s'appelait struct FILE, ca aurait bien simplifie la vie a plein de
gens...
C'est un des points ou C++ est mieux foutu, entre autres grace a iosfwd.
Si tu _participes_ à l'un des projets où abondent paraît-il les variables globales, il est probable que tu voies assez rapidement arriver des sous-projets chargés... d'éradiquer telle ou telle variable globale, généralement en l'englobant dans un type anonyme que l'on trimbale ensuite via un pointeur de fonction en fonction. Pour info, en C le premier de ces types se nomme FILE.
Euh bof... pour exemple de truc propre, FILE, on repassera.
Surtout que stdin, stdout et stderr, comme trucs qui sont `presque' des variables globales, mais pas forcement, c'est tres tres beurk.
Cote FILE: - on sait meme pas ce que c'est en vrai (une struct ? autre chose ?) - il faut inclure stdio.h et on se recupere la definition, avec toutes les cochonneries non visibles qu'il y a dedans.
En particulier, c'est impossible de faire des fonctions qui contiennent des FILE * en parametre qui ne font `que passer' sans avoir a inclure stdio.h (et tu ne peux meme pas mettre un FILE * dans une structure sans inclure stdio.h).
Dans des OS bien connus, a chaque fois qu'il faut changer les E/s dans la bibliotheque standard, FILE fout le bordel, et pas qu'un peu en general... (bon, faut dire que j'ai deja vu des bouts de bibliotheque, xview pour ne pas la nommer, definir `a la main' un FILE (pas un FILE *, hein) juste pour avoir sa version a elle de sprintf... (et apache fait pareil en version 1).
La ou c'est drole (ou pas), c'est que je ne connais pas une seule implementation ou FILE n'est pas, in fine, une struct...
Si ca s'appelait struct FILE, ca aurait bien simplifie la vie a plein de gens...
C'est un des points ou C++ est mieux foutu, entre autres grace a iosfwd.
candide
Et oui. Mais nous ne parlons pas de ce que l'on a fait, nous parlons de ce que l'on devrait faire. Comme dirait l'autre, l'expérience c'est apprendre de ses erreurs,
Je ne défends pas les variables globales, j'ai bien compris les problèmes qu'elles pouvaient poser, je lis ce forum depuis assez de temps. Ce dont je m'étonne, c'est qu'elles puissent encore exister alors que visiblement la quasi totalité des enseignants que je peux lire ou avec lesquels je peux échanger est unanime à en bannir l'usage (à moins que ce ne soit juste problème de maintenance de code du temps où les pratiques étaient mauvaises).
Et oui. Mais nous ne parlons pas de ce que l'on a fait, nous parlons de ce
que l'on devrait faire. Comme dirait l'autre, l'expérience c'est apprendre
de ses erreurs,
Je ne défends pas les variables globales, j'ai bien compris les
problèmes qu'elles pouvaient poser, je lis ce forum depuis assez de
temps. Ce dont je m'étonne, c'est qu'elles puissent encore exister alors
que visiblement la quasi totalité des enseignants que je peux lire ou
avec lesquels je peux échanger est unanime à en bannir l'usage (à moins
que ce ne soit juste problème de maintenance de code du temps où les
pratiques étaient mauvaises).
Et oui. Mais nous ne parlons pas de ce que l'on a fait, nous parlons de ce que l'on devrait faire. Comme dirait l'autre, l'expérience c'est apprendre de ses erreurs,
Je ne défends pas les variables globales, j'ai bien compris les problèmes qu'elles pouvaient poser, je lis ce forum depuis assez de temps. Ce dont je m'étonne, c'est qu'elles puissent encore exister alors que visiblement la quasi totalité des enseignants que je peux lire ou avec lesquels je peux échanger est unanime à en bannir l'usage (à moins que ce ne soit juste problème de maintenance de code du temps où les pratiques étaient mauvaises).
Marc Boyer
On 2008-03-19, candide wrote:
Et oui. Mais nous ne parlons pas de ce que l'on a fait, nous parlons de ce que l'on devrait faire. Comme dirait l'autre, l'expérience c'est apprendre de ses erreurs,
Je ne défends pas les variables globales, j'ai bien compris les problèmes qu'elles pouvaient poser, je lis ce forum depuis assez de temps. Ce dont je m'étonne, c'est qu'elles puissent encore exister alors que visiblement la quasi totalité des enseignants que je peux lire ou avec lesquels je peux échanger est unanime à en bannir l'usage (à moins que ce ne soit juste problème de maintenance de code du temps où les pratiques étaient mauvaises).
Tu sais, l'enseignement... Nous expliquons depuis le début de l'année l'importance de l'indentation, et de ne pas avoir de ligne de plus de 80c, car ça s'imprime mal. Je le répète aux étudiants en TP quand je passe derrière eux.
Là, je suis en train de corriger des mini-projets, notés, qu'ils ont eux-même imprimé. Ben, j'ai encore du code non indenté, et avec des lignes qui débordent...
Marc Boyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. André Maurois)
On 2008-03-19, candide <c.candide@free.fr> wrote:
Et oui. Mais nous ne parlons pas de ce que l'on a fait, nous parlons de ce
que l'on devrait faire. Comme dirait l'autre, l'expérience c'est apprendre
de ses erreurs,
Je ne défends pas les variables globales, j'ai bien compris les
problèmes qu'elles pouvaient poser, je lis ce forum depuis assez de
temps. Ce dont je m'étonne, c'est qu'elles puissent encore exister alors
que visiblement la quasi totalité des enseignants que je peux lire ou
avec lesquels je peux échanger est unanime à en bannir l'usage (à moins
que ce ne soit juste problème de maintenance de code du temps où les
pratiques étaient mauvaises).
Tu sais, l'enseignement...
Nous expliquons depuis le début de l'année l'importance de
l'indentation, et de ne pas avoir de ligne de plus de 80c, car
ça s'imprime mal.
Je le répète aux étudiants en TP quand je passe derrière eux.
Là, je suis en train de corriger des mini-projets, notés,
qu'ils ont eux-même imprimé.
Ben, j'ai encore du code non indenté, et avec des lignes
qui débordent...
Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)
Et oui. Mais nous ne parlons pas de ce que l'on a fait, nous parlons de ce que l'on devrait faire. Comme dirait l'autre, l'expérience c'est apprendre de ses erreurs,
Je ne défends pas les variables globales, j'ai bien compris les problèmes qu'elles pouvaient poser, je lis ce forum depuis assez de temps. Ce dont je m'étonne, c'est qu'elles puissent encore exister alors que visiblement la quasi totalité des enseignants que je peux lire ou avec lesquels je peux échanger est unanime à en bannir l'usage (à moins que ce ne soit juste problème de maintenance de code du temps où les pratiques étaient mauvaises).
Tu sais, l'enseignement... Nous expliquons depuis le début de l'année l'importance de l'indentation, et de ne pas avoir de ligne de plus de 80c, car ça s'imprime mal. Je le répète aux étudiants en TP quand je passe derrière eux.
Là, je suis en train de corriger des mini-projets, notés, qu'ils ont eux-même imprimé. Ben, j'ai encore du code non indenté, et avec des lignes qui débordent...
Marc Boyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. André Maurois)
candide
Là, je suis en train de corriger des mini-projets, notés, qu'ils ont eux-même imprimé. Ben, j'ai encore du code non indenté, et avec des lignes qui débordent...
Ils ont négligé la forme mais il se sont concentrés sur le fond ;)
Là, je suis en train de corriger des mini-projets, notés,
qu'ils ont eux-même imprimé.
Ben, j'ai encore du code non indenté, et avec des lignes
qui débordent...
Ils ont négligé la forme mais il se sont concentrés sur le fond ;)
Là, je suis en train de corriger des mini-projets, notés, qu'ils ont eux-même imprimé. Ben, j'ai encore du code non indenté, et avec des lignes qui débordent...
Ils ont négligé la forme mais il se sont concentrés sur le fond ;)
Erwan David
Marc Boyer écrivait :
On 2008-03-19, candide wrote:
Et oui. Mais nous ne parlons pas de ce que l'on a fait, nous parlons de ce que l'on devrait faire. Comme dirait l'autre, l'expérience c'est apprendre de ses erreurs,
Je ne défends pas les variables globales, j'ai bien compris les problèmes qu'elles pouvaient poser, je lis ce forum depuis assez de temps. Ce dont je m'étonne, c'est qu'elles puissent encore exister alors que visiblement la quasi totalité des enseignants que je peux lire ou avec lesquels je peux échanger est unanime à en bannir l'usage (à moins que ce ne soit juste problème de maintenance de code du temps où les pratiques étaient mauvaises).
Tu sais, l'enseignement... Nous expliquons depuis le début de l'année l'importance de l'indentation, et de ne pas avoir de ligne de plus de 80c, car ça s'imprime mal. Je le répète aux étudiants en TP quand je passe derrière eux.
Là, je suis en train de corriger des mini-projets, notés, qu'ils ont eux-même imprimé. Ben, j'ai encore du code non indenté, et avec des lignes qui débordent...
Moi aussi j'ai ça. Mais moi c'est du code fourni par des pros...
-- Le travail n'est pas une bonne chose. Si ça l'était, les riches l'auraient accaparé
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> écrivait :
On 2008-03-19, candide <c.candide@free.fr> wrote:
Et oui. Mais nous ne parlons pas de ce que l'on a fait, nous parlons de ce
que l'on devrait faire. Comme dirait l'autre, l'expérience c'est apprendre
de ses erreurs,
Je ne défends pas les variables globales, j'ai bien compris les
problèmes qu'elles pouvaient poser, je lis ce forum depuis assez de
temps. Ce dont je m'étonne, c'est qu'elles puissent encore exister alors
que visiblement la quasi totalité des enseignants que je peux lire ou
avec lesquels je peux échanger est unanime à en bannir l'usage (à moins
que ce ne soit juste problème de maintenance de code du temps où les
pratiques étaient mauvaises).
Tu sais, l'enseignement...
Nous expliquons depuis le début de l'année l'importance de
l'indentation, et de ne pas avoir de ligne de plus de 80c, car
ça s'imprime mal.
Je le répète aux étudiants en TP quand je passe derrière eux.
Là, je suis en train de corriger des mini-projets, notés,
qu'ils ont eux-même imprimé.
Ben, j'ai encore du code non indenté, et avec des lignes
qui débordent...
Moi aussi j'ai ça. Mais moi c'est du code fourni par des pros...
--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
Et oui. Mais nous ne parlons pas de ce que l'on a fait, nous parlons de ce que l'on devrait faire. Comme dirait l'autre, l'expérience c'est apprendre de ses erreurs,
Je ne défends pas les variables globales, j'ai bien compris les problèmes qu'elles pouvaient poser, je lis ce forum depuis assez de temps. Ce dont je m'étonne, c'est qu'elles puissent encore exister alors que visiblement la quasi totalité des enseignants que je peux lire ou avec lesquels je peux échanger est unanime à en bannir l'usage (à moins que ce ne soit juste problème de maintenance de code du temps où les pratiques étaient mauvaises).
Tu sais, l'enseignement... Nous expliquons depuis le début de l'année l'importance de l'indentation, et de ne pas avoir de ligne de plus de 80c, car ça s'imprime mal. Je le répète aux étudiants en TP quand je passe derrière eux.
Là, je suis en train de corriger des mini-projets, notés, qu'ils ont eux-même imprimé. Ben, j'ai encore du code non indenté, et avec des lignes qui débordent...
Moi aussi j'ai ça. Mais moi c'est du code fourni par des pros...
-- Le travail n'est pas une bonne chose. Si ça l'était, les riches l'auraient accaparé
Marc Boyer
On 2008-03-19, Erwan David wrote:
Marc Boyer écrivait :
On 2008-03-19, candide wrote:
Et oui. Mais nous ne parlons pas de ce que l'on a fait, nous parlons de ce que l'on devrait faire. Comme dirait l'autre, l'expérience c'est apprendre de ses erreurs,
Je ne défends pas les variables globales, j'ai bien compris les problèmes qu'elles pouvaient poser, je lis ce forum depuis assez de temps. Ce dont je m'étonne, c'est qu'elles puissent encore exister alors que visiblement la quasi totalité des enseignants que je peux lire ou avec lesquels je peux échanger est unanime à en bannir l'usage (à moins que ce ne soit juste problème de maintenance de code du temps où les pratiques étaient mauvaises).
Tu sais, l'enseignement... Nous expliquons depuis le début de l'année l'importance de l'indentation, et de ne pas avoir de ligne de plus de 80c, car ça s'imprime mal. Je le répète aux étudiants en TP quand je passe derrière eux.
Là, je suis en train de corriger des mini-projets, notés, qu'ils ont eux-même imprimé. Ben, j'ai encore du code non indenté, et avec des lignes qui débordent...
Moi aussi j'ai ça. Mais moi c'est du code fourni par des pros...
Et en plus, un pro qui ne connait pas 'indent' de chez GNU...
Marc Boyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. André Maurois)
On 2008-03-19, Erwan David <erwan@rail.eu.org> wrote:
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> écrivait :
On 2008-03-19, candide <c.candide@free.fr> wrote:
Et oui. Mais nous ne parlons pas de ce que l'on a fait, nous parlons de ce
que l'on devrait faire. Comme dirait l'autre, l'expérience c'est apprendre
de ses erreurs,
Je ne défends pas les variables globales, j'ai bien compris les
problèmes qu'elles pouvaient poser, je lis ce forum depuis assez de
temps. Ce dont je m'étonne, c'est qu'elles puissent encore exister alors
que visiblement la quasi totalité des enseignants que je peux lire ou
avec lesquels je peux échanger est unanime à en bannir l'usage (à moins
que ce ne soit juste problème de maintenance de code du temps où les
pratiques étaient mauvaises).
Tu sais, l'enseignement...
Nous expliquons depuis le début de l'année l'importance de
l'indentation, et de ne pas avoir de ligne de plus de 80c, car
ça s'imprime mal.
Je le répète aux étudiants en TP quand je passe derrière eux.
Là, je suis en train de corriger des mini-projets, notés,
qu'ils ont eux-même imprimé.
Ben, j'ai encore du code non indenté, et avec des lignes
qui débordent...
Moi aussi j'ai ça. Mais moi c'est du code fourni par des pros...
Et en plus, un pro qui ne connait pas 'indent' de chez GNU...
Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)
Et oui. Mais nous ne parlons pas de ce que l'on a fait, nous parlons de ce que l'on devrait faire. Comme dirait l'autre, l'expérience c'est apprendre de ses erreurs,
Je ne défends pas les variables globales, j'ai bien compris les problèmes qu'elles pouvaient poser, je lis ce forum depuis assez de temps. Ce dont je m'étonne, c'est qu'elles puissent encore exister alors que visiblement la quasi totalité des enseignants que je peux lire ou avec lesquels je peux échanger est unanime à en bannir l'usage (à moins que ce ne soit juste problème de maintenance de code du temps où les pratiques étaient mauvaises).
Tu sais, l'enseignement... Nous expliquons depuis le début de l'année l'importance de l'indentation, et de ne pas avoir de ligne de plus de 80c, car ça s'imprime mal. Je le répète aux étudiants en TP quand je passe derrière eux.
Là, je suis en train de corriger des mini-projets, notés, qu'ils ont eux-même imprimé. Ben, j'ai encore du code non indenté, et avec des lignes qui débordent...
Moi aussi j'ai ça. Mais moi c'est du code fourni par des pros...
Et en plus, un pro qui ne connait pas 'indent' de chez GNU...
Marc Boyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. André Maurois)