Enfin, j'ai remarqué que:
a | b & c | d
a & b | c & d
a || b && c || d
a && b || c && d
génèrent un warning, alors que:
a + b * c + d
a * b + c * d
laissent gcc muet. Est-ce logique ?
Enfin, j'ai remarqué que:
a | b & c | d
a & b | c & d
a || b && c || d
a && b || c && d
génèrent un warning, alors que:
a + b * c + d
a * b + c * d
laissent gcc muet. Est-ce logique ?
Enfin, j'ai remarqué que:
a | b & c | d
a & b | c & d
a || b && c || d
a && b || c && d
génèrent un warning, alors que:
a + b * c + d
a * b + c * d
laissent gcc muet. Est-ce logique ?
Le Mon, 06 Sep 2010 17:12:45 +0200,
Antoine Leca écrivait :JKB écrivit :Le coup du pointeur NULL qui vaut 0x0, c'est exactement pour moi du
même tonneau que getc() qui renvoie un int,
C'est très simple : à force d'écrire des trucs comme while(*ptr++),
on ne se pose plus la question. Implicitement, on considère que le
tableau termine par un NULL. Si ton NULL vaut 0x1, ton code part
dans le mur. C'est du même tonneau que les gens qui considèrent que
char est un type pour retenir un caractère, ce qui est faut parce
que le caractère EOF est un INT et ne tient que rarement dans un
char.
Le Mon, 06 Sep 2010 17:12:45 +0200,
Antoine Leca <root@localhost.invalid> écrivait :
JKB écrivit :
Le coup du pointeur NULL qui vaut 0x0, c'est exactement pour moi du
même tonneau que getc() qui renvoie un int,
C'est très simple : à force d'écrire des trucs comme while(*ptr++),
on ne se pose plus la question. Implicitement, on considère que le
tableau termine par un NULL. Si ton NULL vaut 0x1, ton code part
dans le mur. C'est du même tonneau que les gens qui considèrent que
char est un type pour retenir un caractère, ce qui est faut parce
que le caractère EOF est un INT et ne tient que rarement dans un
char.
Le Mon, 06 Sep 2010 17:12:45 +0200,
Antoine Leca écrivait :JKB écrivit :Le coup du pointeur NULL qui vaut 0x0, c'est exactement pour moi du
même tonneau que getc() qui renvoie un int,
C'est très simple : à force d'écrire des trucs comme while(*ptr++),
on ne se pose plus la question. Implicitement, on considère que le
tableau termine par un NULL. Si ton NULL vaut 0x1, ton code part
dans le mur. C'est du même tonneau que les gens qui considèrent que
char est un type pour retenir un caractère, ce qui est faut parce
que le caractère EOF est un INT et ne tient que rarement dans un
char.
Le Mon, 06 Sep 2010 17:12:45 +0200,
Antoine Leca écrivait :JKB écrivit :Le coup du pointeur NULL qui vaut 0x0, c'est exactement pour moi du
même tonneau que getc() qui renvoie un int,
Tu peux développer STP ? Je vois bien un piège avec le type (et le
domaine de valeurs) retourné par getc(), et je vois bien un autre piège
avec des échanges indus entre NULL et 0 (du genre que tu décris et
d'autres), mais je n'arrive pas à faire l'association entre les deux pièges.
C'est très simple : à force d'écrire des trucs comme while(*ptr++),
on ne se pose plus la question. Implicitement, on considère que le
tableau termine par un NULL. Si ton NULL vaut 0x1, ton code part
dans le mur. C'est du même tonneau que les gens qui considèrent que
char est un type pour retenir un caractère, ce qui est faut parce
que le caractère EOF est un INT et ne tient que rarement dans un
char.
Le Mon, 06 Sep 2010 17:12:45 +0200,
Antoine Leca <root@localhost.invalid> écrivait :
JKB écrivit :
Le coup du pointeur NULL qui vaut 0x0, c'est exactement pour moi du
même tonneau que getc() qui renvoie un int,
Tu peux développer STP ? Je vois bien un piège avec le type (et le
domaine de valeurs) retourné par getc(), et je vois bien un autre piège
avec des échanges indus entre NULL et 0 (du genre que tu décris et
d'autres), mais je n'arrive pas à faire l'association entre les deux pièges.
C'est très simple : à force d'écrire des trucs comme while(*ptr++),
on ne se pose plus la question. Implicitement, on considère que le
tableau termine par un NULL. Si ton NULL vaut 0x1, ton code part
dans le mur. C'est du même tonneau que les gens qui considèrent que
char est un type pour retenir un caractère, ce qui est faut parce
que le caractère EOF est un INT et ne tient que rarement dans un
char.
Le Mon, 06 Sep 2010 17:12:45 +0200,
Antoine Leca écrivait :JKB écrivit :Le coup du pointeur NULL qui vaut 0x0, c'est exactement pour moi du
même tonneau que getc() qui renvoie un int,
Tu peux développer STP ? Je vois bien un piège avec le type (et le
domaine de valeurs) retourné par getc(), et je vois bien un autre piège
avec des échanges indus entre NULL et 0 (du genre que tu décris et
d'autres), mais je n'arrive pas à faire l'association entre les deux pièges.
C'est très simple : à force d'écrire des trucs comme while(*ptr++),
on ne se pose plus la question. Implicitement, on considère que le
tableau termine par un NULL. Si ton NULL vaut 0x1, ton code part
dans le mur. C'est du même tonneau que les gens qui considèrent que
char est un type pour retenir un caractère, ce qui est faut parce
que le caractère EOF est un INT et ne tient que rarement dans un
char.
Pierre Maurette écrivit :Enfin, j'ai remarqué que:
a | b & c | d
a & b | c & d
a || b && c || d
a && b || c && d
génèrent un warning, alors que:
a + b * c + d
a * b + c * d
laissent gcc muet. Est-ce logique ?
Pas vraiment, mais on peut raisonnablement arguer que les deux dernières
formulations ne sont équivoques que pour 0,01% des programmeurs C (qui
d'ailleurs contribuent en grande part à ce
fil ;-) )
, tandis que les premières formulations, quoique non
ambiguës, ont tendance à hérisser le poil de nombre de programmeurs
(enfin, c'est surtout vrai des deux premières : les 3 et 4 me paraissent
complètement naturelles, et l'avertissement un tant
soit peu abusif ; en fait, j'ai même cherché un peu un langage sans
priorité relative entre && et ||, et je suis bredouille : même VB
fait la différence).
Pierre Maurette écrivit :
Enfin, j'ai remarqué que:
a | b & c | d
a & b | c & d
a || b && c || d
a && b || c && d
génèrent un warning, alors que:
a + b * c + d
a * b + c * d
laissent gcc muet. Est-ce logique ?
Pas vraiment, mais on peut raisonnablement arguer que les deux dernières
formulations ne sont équivoques que pour 0,01% des programmeurs C (qui
d'ailleurs contribuent en grande part à ce
fil ;-) )
, tandis que les premières formulations, quoique non
ambiguës, ont tendance à hérisser le poil de nombre de programmeurs
(enfin, c'est surtout vrai des deux premières : les 3 et 4 me paraissent
complètement naturelles, et l'avertissement un tant
soit peu abusif ; en fait, j'ai même cherché un peu un langage sans
priorité relative entre && et ||, et je suis bredouille : même VB
fait la différence).
Pierre Maurette écrivit :Enfin, j'ai remarqué que:
a | b & c | d
a & b | c & d
a || b && c || d
a && b || c && d
génèrent un warning, alors que:
a + b * c + d
a * b + c * d
laissent gcc muet. Est-ce logique ?
Pas vraiment, mais on peut raisonnablement arguer que les deux dernières
formulations ne sont équivoques que pour 0,01% des programmeurs C (qui
d'ailleurs contribuent en grande part à ce
fil ;-) )
, tandis que les premières formulations, quoique non
ambiguës, ont tendance à hérisser le poil de nombre de programmeurs
(enfin, c'est surtout vrai des deux premières : les 3 et 4 me paraissent
complètement naturelles, et l'avertissement un tant
soit peu abusif ; en fait, j'ai même cherché un peu un langage sans
priorité relative entre && et ||, et je suis bredouille : même VB
fait la différence).
In article , JKB <invalid> wrote:Le Mon, 06 Sep 2010 17:12:45 +0200,
Antoine Leca écrivait :JKB écrivit :Le coup du pointeur NULL qui vaut 0x0, c'est exactement pour moi du
même tonneau que getc() qui renvoie un int,
Tu peux développer STP ? Je vois bien un piège avec le type (et le
domaine de valeurs) retourné par getc(), et je vois bien un autre piège
avec des échanges indus entre NULL et 0 (du genre que tu décris et
d'autres), mais je n'arrive pas à faire l'association entre les deux pièges.
C'est très simple : à force d'écrire des trucs comme while(*ptr++),
on ne se pose plus la question. Implicitement, on considère que le
tableau termine par un NULL. Si ton NULL vaut 0x1, ton code part
dans le mur. C'est du même tonneau que les gens qui considèrent que
char est un type pour retenir un caractère, ce qui est faut parce
que le caractère EOF est un INT et ne tient que rarement dans un
char.
Bon, deja, faut arreter de melanger les choses. NULL, c'est une macro definie
dans stddef.h. Sa valeur n'a qu'un vague rapport avec le pointeur nul et
sa semantique.
In article <slrni8a39n.tg1.jkb@rayleigh.systella.fr>, JKB <invalid> wrote:
Le Mon, 06 Sep 2010 17:12:45 +0200,
Antoine Leca <root@localhost.invalid> écrivait :
JKB écrivit :
Le coup du pointeur NULL qui vaut 0x0, c'est exactement pour moi du
même tonneau que getc() qui renvoie un int,
Tu peux développer STP ? Je vois bien un piège avec le type (et le
domaine de valeurs) retourné par getc(), et je vois bien un autre piège
avec des échanges indus entre NULL et 0 (du genre que tu décris et
d'autres), mais je n'arrive pas à faire l'association entre les deux pièges.
C'est très simple : à force d'écrire des trucs comme while(*ptr++),
on ne se pose plus la question. Implicitement, on considère que le
tableau termine par un NULL. Si ton NULL vaut 0x1, ton code part
dans le mur. C'est du même tonneau que les gens qui considèrent que
char est un type pour retenir un caractère, ce qui est faut parce
que le caractère EOF est un INT et ne tient que rarement dans un
char.
Bon, deja, faut arreter de melanger les choses. NULL, c'est une macro definie
dans stddef.h. Sa valeur n'a qu'un vague rapport avec le pointeur nul et
sa semantique.
In article , JKB <invalid> wrote:Le Mon, 06 Sep 2010 17:12:45 +0200,
Antoine Leca écrivait :JKB écrivit :Le coup du pointeur NULL qui vaut 0x0, c'est exactement pour moi du
même tonneau que getc() qui renvoie un int,
Tu peux développer STP ? Je vois bien un piège avec le type (et le
domaine de valeurs) retourné par getc(), et je vois bien un autre piège
avec des échanges indus entre NULL et 0 (du genre que tu décris et
d'autres), mais je n'arrive pas à faire l'association entre les deux pièges.
C'est très simple : à force d'écrire des trucs comme while(*ptr++),
on ne se pose plus la question. Implicitement, on considère que le
tableau termine par un NULL. Si ton NULL vaut 0x1, ton code part
dans le mur. C'est du même tonneau que les gens qui considèrent que
char est un type pour retenir un caractère, ce qui est faut parce
que le caractère EOF est un INT et ne tient que rarement dans un
char.
Bon, deja, faut arreter de melanger les choses. NULL, c'est une macro definie
dans stddef.h. Sa valeur n'a qu'un vague rapport avec le pointeur nul et
sa semantique.
La trituration sur les expressions booléennes se faisaient au brouillon
- et sur la copie il me semble bien - en utilisant + pour le OU, la
juxtaposition pour le ET et la barre pour la négation. La factorisation
fonctionne, après il faudrait rentrer dans la théorie des ensembles
pour expliciter les limites de cette assimilation.
La trituration sur les expressions booléennes se faisaient au brouillon
- et sur la copie il me semble bien - en utilisant + pour le OU, la
juxtaposition pour le ET et la barre pour la négation. La factorisation
fonctionne, après il faudrait rentrer dans la théorie des ensembles
pour expliciter les limites de cette assimilation.
La trituration sur les expressions booléennes se faisaient au brouillon
- et sur la copie il me semble bien - en utilisant + pour le OU, la
juxtaposition pour le ET et la barre pour la négation. La factorisation
fonctionne, après il faudrait rentrer dans la théorie des ensembles
pour expliciter les limites de cette assimilation.
Bref, tant que NULL vaut 0, tout se passe pour le mieux. Lorsque ce
n'est plus vrai, on commence à rigoler. Personnellement, ça fait
plus de vingt ans que je me tape du C sur des systèmes bizarres et
je préfère de loin une parenthèse en trop ou un test (ptr == NULL)
que de rechercher des bugs à la noix dans des milliers de lignes de
code.
Bref, tant que NULL vaut 0, tout se passe pour le mieux. Lorsque ce
n'est plus vrai, on commence à rigoler. Personnellement, ça fait
plus de vingt ans que je me tape du C sur des systèmes bizarres et
je préfère de loin une parenthèse en trop ou un test (ptr == NULL)
que de rechercher des bugs à la noix dans des milliers de lignes de
code.
Bref, tant que NULL vaut 0, tout se passe pour le mieux. Lorsque ce
n'est plus vrai, on commence à rigoler. Personnellement, ça fait
plus de vingt ans que je me tape du C sur des systèmes bizarres et
je préfère de loin une parenthèse en trop ou un test (ptr == NULL)
que de rechercher des bugs à la noix dans des milliers de lignes de
code.
In article ,
Pierre Maurette wrote:La trituration sur les expressions booléennes se faisaient au brouillon
- et sur la copie il me semble bien - en utilisant + pour le OU, la
juxtaposition pour le ET et la barre pour la négation. La factorisation
fonctionne, après il faudrait rentrer dans la théorie des ensembles
pour expliciter les limites de cette assimilation.
Tu confonds theorie des ensembles et algebre, j'ai l'impression.
L'algebre booleenne a des regles relativement simples. En particulier, la
negation est un morphisme de ({faux,vrai}, &, |) -> ({vrai,faux}, |, &),
In article <mn.34547da9ec2b28ad.79899@wanadoo.fr>,
Pierre Maurette <maurettepierre@wanadoo.fr> wrote:
La trituration sur les expressions booléennes se faisaient au brouillon
- et sur la copie il me semble bien - en utilisant + pour le OU, la
juxtaposition pour le ET et la barre pour la négation. La factorisation
fonctionne, après il faudrait rentrer dans la théorie des ensembles
pour expliciter les limites de cette assimilation.
Tu confonds theorie des ensembles et algebre, j'ai l'impression.
L'algebre booleenne a des regles relativement simples. En particulier, la
negation est un morphisme de ({faux,vrai}, &, |) -> ({vrai,faux}, |, &),
In article ,
Pierre Maurette wrote:La trituration sur les expressions booléennes se faisaient au brouillon
- et sur la copie il me semble bien - en utilisant + pour le OU, la
juxtaposition pour le ET et la barre pour la négation. La factorisation
fonctionne, après il faudrait rentrer dans la théorie des ensembles
pour expliciter les limites de cette assimilation.
Tu confonds theorie des ensembles et algebre, j'ai l'impression.
L'algebre booleenne a des regles relativement simples. En particulier, la
negation est un morphisme de ({faux,vrai}, &, |) -> ({vrai,faux}, |, &),
Perso j'ai vu que dans des systèmes où "tout est nombre" certains utilisent
le + et * pour faire des "ou" et des "et" logiques. Ce ne sont pas des
charlots pour autant, mais c'est lié à long héritage culturel. Le faux y vaut
0, et le vrai toute valeur non nulle. Si les nombre sont unsigned et les
opérations saturantes.
A ce moment là on a bien identité entre + et ||, et
entre * et &&, sauf qu'il n'y a pas de short-cut dans l'évaluation: les deux
cotés de l'opérateur sont évalués.
Perso j'ai vu que dans des systèmes où "tout est nombre" certains utilisent
le + et * pour faire des "ou" et des "et" logiques. Ce ne sont pas des
charlots pour autant, mais c'est lié à long héritage culturel. Le faux y vaut
0, et le vrai toute valeur non nulle. Si les nombre sont unsigned et les
opérations saturantes.
A ce moment là on a bien identité entre + et ||, et
entre * et &&, sauf qu'il n'y a pas de short-cut dans l'évaluation: les deux
cotés de l'opérateur sont évalués.
Perso j'ai vu que dans des systèmes où "tout est nombre" certains utilisent
le + et * pour faire des "ou" et des "et" logiques. Ce ne sont pas des
charlots pour autant, mais c'est lié à long héritage culturel. Le faux y vaut
0, et le vrai toute valeur non nulle. Si les nombre sont unsigned et les
opérations saturantes.
A ce moment là on a bien identité entre + et ||, et
entre * et &&, sauf qu'il n'y a pas de short-cut dans l'évaluation: les deux
cotés de l'opérateur sont évalués.
"naturelle", ca suppose par convention que 0úux. Tu aurais tout aussi bien
pu prendre 0=vrai, et ta convention s'echappe...
"naturelle", ca suppose par convention que 0úux. Tu aurais tout aussi bien
pu prendre 0=vrai, et ta convention s'echappe...
"naturelle", ca suppose par convention que 0úux. Tu aurais tout aussi bien
pu prendre 0=vrai, et ta convention s'echappe...