Il reste Microsoft qui eux sont restés sur long2 bits, tout en
expliquant qu'il ne faut pas utiliser les types de base (ni printf).
Il reste Microsoft qui eux sont restés sur long2 bits, tout en
expliquant qu'il ne faut pas utiliser les types de base (ni printf).
Il reste Microsoft qui eux sont restés sur long2 bits, tout en
expliquant qu'il ne faut pas utiliser les types de base (ni printf).
Ca veut dire quoi "sale" pour toi?
Est-ce sale d'écrire "static a = 4" dans du code? Pas forcément. En C89
int est implicite et le code se comprend par tous.
Dialogue:
Perso1 => Oui mais l'implicite c'est pas-bien(tm)!
Perso2 => Ah ok, mais quand on écrit static long a = 4 en C99 c'est bien
alors?
Perso1 => Oui!
Perso2 => Mais le long n'est pas un type. Le vrai type c'est "long int".
"int" est encore implicite en C99.
Perso1 => Ah oui l'implicite c'est propre alors!
> Du code C89 sale... D'ailleurs, certains exemples sont mauvais même
> en C99, e.g. oubli du "return 0;".
même en C99? Oui surtout en C99! parce qu'en C89 ca passe, cf:
f() {... blabla; if(truc) return; blabla...}
Grossièrement pour ceux qui ne savent plus lire du vieux C: f est une
fonction qui retourne rien, d'où return vide. Logique. Sauf que rien
signifie implicitement int en C89. En pratique ca veut dire que le
compilo ne retourne rien de spécial à la fonction. Il va peut être
utiliser cela pour optimiser. Qui sait?
>> Autre truc. C99 est plus stricte que C89. Normalement C89 laisse passer
>> ce qui suit, mais pas C99:
>> char *s=...
>> unsigned char *t=s; /* erreur avec C99 */
>
> Ça me semble valide en C99. Pourquoi ne le serait-ce pas?
==> pointer targets in initialization differ in signedness.
>>> Quand on ne précise pas le contexte, c'est celui de la norme C ISO.
>>> La seule norme C est actuellement la version de 1999 (a.k.a. C99).
>>> C89 n'est plus une norme, même si on peut en parler...
>
>> Pourquoi ?
>
> Parce que C89 n'est plus une norme.
Pourquoi ca n'est pas une norme? Parce que ca n'est plus une norme, pardi!
Ca veut dire quoi "sale" pour toi?
Est-ce sale d'écrire "static a = 4" dans du code? Pas forcément. En C89
int est implicite et le code se comprend par tous.
Dialogue:
Perso1 => Oui mais l'implicite c'est pas-bien(tm)!
Perso2 => Ah ok, mais quand on écrit static long a = 4 en C99 c'est bien
alors?
Perso1 => Oui!
Perso2 => Mais le long n'est pas un type. Le vrai type c'est "long int".
"int" est encore implicite en C99.
Perso1 => Ah oui l'implicite c'est propre alors!
> Du code C89 sale... D'ailleurs, certains exemples sont mauvais même
> en C99, e.g. oubli du "return 0;".
même en C99? Oui surtout en C99! parce qu'en C89 ca passe, cf:
f() {... blabla; if(truc) return; blabla...}
Grossièrement pour ceux qui ne savent plus lire du vieux C: f est une
fonction qui retourne rien, d'où return vide. Logique. Sauf que rien
signifie implicitement int en C89. En pratique ca veut dire que le
compilo ne retourne rien de spécial à la fonction. Il va peut être
utiliser cela pour optimiser. Qui sait?
>> Autre truc. C99 est plus stricte que C89. Normalement C89 laisse passer
>> ce qui suit, mais pas C99:
>> char *s=...
>> unsigned char *t=s; /* erreur avec C99 */
>
> Ça me semble valide en C99. Pourquoi ne le serait-ce pas?
==> pointer targets in initialization differ in signedness.
>>> Quand on ne précise pas le contexte, c'est celui de la norme C ISO.
>>> La seule norme C est actuellement la version de 1999 (a.k.a. C99).
>>> C89 n'est plus une norme, même si on peut en parler...
>
>> Pourquoi ?
>
> Parce que C89 n'est plus une norme.
Pourquoi ca n'est pas une norme? Parce que ca n'est plus une norme, pardi!
Ca veut dire quoi "sale" pour toi?
Est-ce sale d'écrire "static a = 4" dans du code? Pas forcément. En C89
int est implicite et le code se comprend par tous.
Dialogue:
Perso1 => Oui mais l'implicite c'est pas-bien(tm)!
Perso2 => Ah ok, mais quand on écrit static long a = 4 en C99 c'est bien
alors?
Perso1 => Oui!
Perso2 => Mais le long n'est pas un type. Le vrai type c'est "long int".
"int" est encore implicite en C99.
Perso1 => Ah oui l'implicite c'est propre alors!
> Du code C89 sale... D'ailleurs, certains exemples sont mauvais même
> en C99, e.g. oubli du "return 0;".
même en C99? Oui surtout en C99! parce qu'en C89 ca passe, cf:
f() {... blabla; if(truc) return; blabla...}
Grossièrement pour ceux qui ne savent plus lire du vieux C: f est une
fonction qui retourne rien, d'où return vide. Logique. Sauf que rien
signifie implicitement int en C89. En pratique ca veut dire que le
compilo ne retourne rien de spécial à la fonction. Il va peut être
utiliser cela pour optimiser. Qui sait?
>> Autre truc. C99 est plus stricte que C89. Normalement C89 laisse passer
>> ce qui suit, mais pas C99:
>> char *s=...
>> unsigned char *t=s; /* erreur avec C99 */
>
> Ça me semble valide en C99. Pourquoi ne le serait-ce pas?
==> pointer targets in initialization differ in signedness.
>>> Quand on ne précise pas le contexte, c'est celui de la norme C ISO.
>>> La seule norme C est actuellement la version de 1999 (a.k.a. C99).
>>> C89 n'est plus une norme, même si on peut en parler...
>
>> Pourquoi ?
>
> Parce que C89 n'est plus une norme.
Pourquoi ca n'est pas une norme? Parce que ca n'est plus une norme, pardi!
Le problème entre Vincent et moi sur ce truc c'est que quand on parle
des nombres qui suivent le "p", il dit binaire par rapport au fait que
p=2^d ce que je juge inutilement précis/imprécis car
- p est en lui même "puissance de deux"
- ca ne dit pas comment interpréter les nombres suivant: en base dix,
deux ou seize? (16 serait logique par référence à la fraction à ce
moment là)
Le problème entre Vincent et moi sur ce truc c'est que quand on parle
des nombres qui suivent le "p", il dit binaire par rapport au fait que
p=2^d ce que je juge inutilement précis/imprécis car
- p est en lui même "puissance de deux"
- ca ne dit pas comment interpréter les nombres suivant: en base dix,
deux ou seize? (16 serait logique par référence à la fraction à ce
moment là)
Le problème entre Vincent et moi sur ce truc c'est que quand on parle
des nombres qui suivent le "p", il dit binaire par rapport au fait que
p=2^d ce que je juge inutilement précis/imprécis car
- p est en lui même "puissance de deux"
- ca ne dit pas comment interpréter les nombres suivant: en base dix,
deux ou seize? (16 serait logique par référence à la fraction à ce
moment là)
Vincent Lefevre a écrit :
> Dans l'article <4bbb03ab$0$8366$,
> Samuel DEVULDER écrit:
>
>> Désolé. Sur http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1124.pdf je
>> n'ai pas trouvé "binary exponent part" dans la description de printf
>
> Ce n'était pas dans la description de printf (le format en question
> revient à plusieurs endroits dans la norme, pas seulement avec
> printf).
Heu je sais pas.. on parle de printf, aussi je regarde la spec de ce
dernier? Pas toi? Tu vas voir de quel coté toi, strod? atoi? rand?
Quelle blague!
Vincent Lefevre a écrit :
> Dans l'article <4bbb03ab$0$8366$426a74cc@news.free.fr>,
> Samuel DEVULDER <samuel-dot-devulder@laposte-dot-com> écrit:
>
>> Désolé. Sur http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1124.pdf je
>> n'ai pas trouvé "binary exponent part" dans la description de printf
>
> Ce n'était pas dans la description de printf (le format en question
> revient à plusieurs endroits dans la norme, pas seulement avec
> printf).
Heu je sais pas.. on parle de printf, aussi je regarde la spec de ce
dernier? Pas toi? Tu vas voir de quel coté toi, strod? atoi? rand?
Quelle blague!
Vincent Lefevre a écrit :
> Dans l'article <4bbb03ab$0$8366$,
> Samuel DEVULDER écrit:
>
>> Désolé. Sur http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1124.pdf je
>> n'ai pas trouvé "binary exponent part" dans la description de printf
>
> Ce n'était pas dans la description de printf (le format en question
> revient à plusieurs endroits dans la norme, pas seulement avec
> printf).
Heu je sais pas.. on parle de printf, aussi je regarde la spec de ce
dernier? Pas toi? Tu vas voir de quel coté toi, strod? atoi? rand?
Quelle blague!
Oh il n'y a pas que MSVC qui a des long à 32bits.. TCC, et LCC sont
aussi comme cela. Il faudra que vérifie CodeWarrior mais ca ne
m'étonnerait pas non plus (et pourtant le CPU cible est un 64bits...)
Oh il n'y a pas que MSVC qui a des long à 32bits.. TCC, et LCC sont
aussi comme cela. Il faudra que vérifie CodeWarrior mais ca ne
m'étonnerait pas non plus (et pourtant le CPU cible est un 64bits...)
Oh il n'y a pas que MSVC qui a des long à 32bits.. TCC, et LCC sont
aussi comme cela. Il faudra que vérifie CodeWarrior mais ca ne
m'étonnerait pas non plus (et pourtant le CPU cible est un 64bits...)
Dans l'article <4bbb6912$0$16031$,
Samuel DEVULDER écrit:Vincent Lefevre a écrit :Dans l'article <4bbb03ab$0$8366$,
Samuel DEVULDER écrit:Désolé. Sur http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1124.pdf je
n'ai pas trouvé "binary exponent part" dans la description de printf
Ce n'était pas dans la description de printf (le format en question
revient à plusieurs endroits dans la norme, pas seulement avec
printf).Heu je sais pas.. on parle de printf, aussi je regarde la spec de ce
dernier? Pas toi? Tu vas voir de quel coté toi, strod? atoi? rand?
Quelle blague!
Tu demandais ce que voulait dire "exposant binaire". Je te donne
simplement une référence où ce terme est employé! Et quitte à
utiliser une spec, autant choisir celle qui utilise les termes
adéquats.
Si tu ne veux pas qu'on réponde à tes questions, n'en pose pas!
Dans l'article <4bbb6912$0$16031$426a74cc@news.free.fr>,
Samuel DEVULDER <samuel-dot-devulder@laposte-dot-com> écrit:
Vincent Lefevre a écrit :
Dans l'article <4bbb03ab$0$8366$426a74cc@news.free.fr>,
Samuel DEVULDER <samuel-dot-devulder@laposte-dot-com> écrit:
Désolé. Sur http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1124.pdf je
n'ai pas trouvé "binary exponent part" dans la description de printf
Ce n'était pas dans la description de printf (le format en question
revient à plusieurs endroits dans la norme, pas seulement avec
printf).
Heu je sais pas.. on parle de printf, aussi je regarde la spec de ce
dernier? Pas toi? Tu vas voir de quel coté toi, strod? atoi? rand?
Quelle blague!
Tu demandais ce que voulait dire "exposant binaire". Je te donne
simplement une référence où ce terme est employé! Et quitte à
utiliser une spec, autant choisir celle qui utilise les termes
adéquats.
Si tu ne veux pas qu'on réponde à tes questions, n'en pose pas!
Dans l'article <4bbb6912$0$16031$,
Samuel DEVULDER écrit:Vincent Lefevre a écrit :Dans l'article <4bbb03ab$0$8366$,
Samuel DEVULDER écrit:Désolé. Sur http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1124.pdf je
n'ai pas trouvé "binary exponent part" dans la description de printf
Ce n'était pas dans la description de printf (le format en question
revient à plusieurs endroits dans la norme, pas seulement avec
printf).Heu je sais pas.. on parle de printf, aussi je regarde la spec de ce
dernier? Pas toi? Tu vas voir de quel coté toi, strod? atoi? rand?
Quelle blague!
Tu demandais ce que voulait dire "exposant binaire". Je te donne
simplement une référence où ce terme est employé! Et quitte à
utiliser une spec, autant choisir celle qui utilise les termes
adéquats.
Si tu ne veux pas qu'on réponde à tes questions, n'en pose pas!
Dans l'article <4bbb7cce$0$18404$,
Samuel DEVULDER écrit:Ca veut dire quoi "sale" pour toi?
Utiliser des int implicites, par exemple.
Dans l'article <4bbb7cce$0$18404$426a74cc@news.free.fr>,
Samuel DEVULDER <samuel-dot-devulder@laposte-dot-com> écrit:
Ca veut dire quoi "sale" pour toi?
Utiliser des int implicites, par exemple.
Dans l'article <4bbb7cce$0$18404$,
Samuel DEVULDER écrit:Ca veut dire quoi "sale" pour toi?
Utiliser des int implicites, par exemple.
Dans l'article <4bbb724f$0$7072$,
Samuel DEVULDER écrit:Le problème entre Vincent et moi sur ce truc c'est que quand on parle
des nombres qui suivent le "p", il dit binaire par rapport au fait que
p=2^d ce que je juge inutilement précis/imprécis car
- p est en lui même "puissance de deux"
- ca ne dit pas comment interpréter les nombres suivant: en base dix,
deux ou seize? (16 serait logique par référence à la fraction à ce
moment là)
La bonne formulation serait: "exposant binaire écrit en base 10".
Note que cela suivrait aussi l'usage mathématique, où on parle
de "logarithme décimal", par exemple: cela ne signifie pas qu'on
écrit le résultat en base 10, mais que c'est la fonction
réciproque de 10^x. Le "logarithme binaire" est également
utilisé, et c'est la fonction réciproque de 2^x, et non pas
un logarithme écrit en base 2.
Dans l'article <4bbb724f$0$7072$426a74cc@news.free.fr>,
Samuel DEVULDER <samuel-dot-devulder@laposte-dot-com> écrit:
Le problème entre Vincent et moi sur ce truc c'est que quand on parle
des nombres qui suivent le "p", il dit binaire par rapport au fait que
p=2^d ce que je juge inutilement précis/imprécis car
- p est en lui même "puissance de deux"
- ca ne dit pas comment interpréter les nombres suivant: en base dix,
deux ou seize? (16 serait logique par référence à la fraction à ce
moment là)
La bonne formulation serait: "exposant binaire écrit en base 10".
Note que cela suivrait aussi l'usage mathématique, où on parle
de "logarithme décimal", par exemple: cela ne signifie pas qu'on
écrit le résultat en base 10, mais que c'est la fonction
réciproque de 10^x. Le "logarithme binaire" est également
utilisé, et c'est la fonction réciproque de 2^x, et non pas
un logarithme écrit en base 2.
Dans l'article <4bbb724f$0$7072$,
Samuel DEVULDER écrit:Le problème entre Vincent et moi sur ce truc c'est que quand on parle
des nombres qui suivent le "p", il dit binaire par rapport au fait que
p=2^d ce que je juge inutilement précis/imprécis car
- p est en lui même "puissance de deux"
- ca ne dit pas comment interpréter les nombres suivant: en base dix,
deux ou seize? (16 serait logique par référence à la fraction à ce
moment là)
La bonne formulation serait: "exposant binaire écrit en base 10".
Note que cela suivrait aussi l'usage mathématique, où on parle
de "logarithme décimal", par exemple: cela ne signifie pas qu'on
écrit le résultat en base 10, mais que c'est la fonction
réciproque de 10^x. Le "logarithme binaire" est également
utilisé, et c'est la fonction réciproque de 2^x, et non pas
un logarithme écrit en base 2.
Dans l'article <4bbbd825$0$24902$,
Samuel DEVULDER écrit:Oh il n'y a pas que MSVC qui a des long à 32bits.. TCC, et LCC sont
aussi comme cela. Il faudra que vérifie CodeWarrior mais ca ne
m'étonnerait pas non plus (et pourtant le CPU cible est un 64bits...)
Pas essayé LCC, mais pour TCC, c'est faux. Sous Linux/x86_64:
ypig:.../testcases/c-impl> tcc types.c
ypig:.../testcases/c-impl> ./a.out
[...]
--> long / unsigned long
LONG_MIN = - 2^63 = -9223372036854775808
LONG_MAX = 2^63 - 1 = 9223372036854775807
ULONG_MAX = 2^64 - 1 = 18446744073709551615
sizeof(long) = 8, signed
sizeof(unsigned long) = 8, unsigned
[...]
Dans l'article <4bbbd825$0$24902$426a74cc@news.free.fr>,
Samuel DEVULDER <samuel-dot-devulder@laposte-dot-com> écrit:
Oh il n'y a pas que MSVC qui a des long à 32bits.. TCC, et LCC sont
aussi comme cela. Il faudra que vérifie CodeWarrior mais ca ne
m'étonnerait pas non plus (et pourtant le CPU cible est un 64bits...)
Pas essayé LCC, mais pour TCC, c'est faux. Sous Linux/x86_64:
ypig:.../testcases/c-impl> tcc types.c
ypig:.../testcases/c-impl> ./a.out
[...]
--> long / unsigned long
LONG_MIN = - 2^63 = -9223372036854775808
LONG_MAX = 2^63 - 1 = 9223372036854775807
ULONG_MAX = 2^64 - 1 = 18446744073709551615
sizeof(long) = 8, signed
sizeof(unsigned long) = 8, unsigned
[...]
Dans l'article <4bbbd825$0$24902$,
Samuel DEVULDER écrit:Oh il n'y a pas que MSVC qui a des long à 32bits.. TCC, et LCC sont
aussi comme cela. Il faudra que vérifie CodeWarrior mais ca ne
m'étonnerait pas non plus (et pourtant le CPU cible est un 64bits...)
Pas essayé LCC, mais pour TCC, c'est faux. Sous Linux/x86_64:
ypig:.../testcases/c-impl> tcc types.c
ypig:.../testcases/c-impl> ./a.out
[...]
--> long / unsigned long
LONG_MIN = - 2^63 = -9223372036854775808
LONG_MAX = 2^63 - 1 = 9223372036854775807
ULONG_MAX = 2^64 - 1 = 18446744073709551615
sizeof(long) = 8, signed
sizeof(unsigned long) = 8, unsigned
[...]
Vincent Lefevre a écrit :
> Pas essayé LCC, mais pour TCC, c'est faux. Sous Linux/x86_64:
>
> ypig:.../testcases/c-impl> tcc types.c
> ypig:.../testcases/c-impl> ./a.out
> [...]
> --> long / unsigned long
> LONG_MIN = - 2^63 = -9223372036854775808
> LONG_MAX = 2^63 - 1 = 9223372036854775807
> ULONG_MAX = 2^64 - 1 = 18446744073709551615
> sizeof(long) = 8, signed
> sizeof(unsigned long) = 8, unsigned
> [...]
Et alors? TCC sous DOS, ou ARM a aussi des longs à 32bit et c'est pour
cela que je dis que MSVC n'est pas le seul à avoir un long à 32bit.
ce qu'il se passe, dans cette partie c'est on remplace "long" par un int
ou long long (64bits). Pour la target X86_64 (linux), c'est 64bits et
*partout* ailleurs (dos, arm, C67, cil) c'est du 32bits.
Pour l'instant les unixoides ont fait la bascule sizeof(long)==8, le
reste du monde (et il y en a pas mal) ont encore une ABI assez ancrée
32bits.
Vincent Lefevre a écrit :
> Pas essayé LCC, mais pour TCC, c'est faux. Sous Linux/x86_64:
>
> ypig:.../testcases/c-impl> tcc types.c
> ypig:.../testcases/c-impl> ./a.out
> [...]
> --> long / unsigned long
> LONG_MIN = - 2^63 = -9223372036854775808
> LONG_MAX = 2^63 - 1 = 9223372036854775807
> ULONG_MAX = 2^64 - 1 = 18446744073709551615
> sizeof(long) = 8, signed
> sizeof(unsigned long) = 8, unsigned
> [...]
Et alors? TCC sous DOS, ou ARM a aussi des longs à 32bit et c'est pour
cela que je dis que MSVC n'est pas le seul à avoir un long à 32bit.
ce qu'il se passe, dans cette partie c'est on remplace "long" par un int
ou long long (64bits). Pour la target X86_64 (linux), c'est 64bits et
*partout* ailleurs (dos, arm, C67, cil) c'est du 32bits.
Pour l'instant les unixoides ont fait la bascule sizeof(long)==8, le
reste du monde (et il y en a pas mal) ont encore une ABI assez ancrée
32bits.
Vincent Lefevre a écrit :
> Pas essayé LCC, mais pour TCC, c'est faux. Sous Linux/x86_64:
>
> ypig:.../testcases/c-impl> tcc types.c
> ypig:.../testcases/c-impl> ./a.out
> [...]
> --> long / unsigned long
> LONG_MIN = - 2^63 = -9223372036854775808
> LONG_MAX = 2^63 - 1 = 9223372036854775807
> ULONG_MAX = 2^64 - 1 = 18446744073709551615
> sizeof(long) = 8, signed
> sizeof(unsigned long) = 8, unsigned
> [...]
Et alors? TCC sous DOS, ou ARM a aussi des longs à 32bit et c'est pour
cela que je dis que MSVC n'est pas le seul à avoir un long à 32bit.
ce qu'il se passe, dans cette partie c'est on remplace "long" par un int
ou long long (64bits). Pour la target X86_64 (linux), c'est 64bits et
*partout* ailleurs (dos, arm, C67, cil) c'est du 32bits.
Pour l'instant les unixoides ont fait la bascule sizeof(long)==8, le
reste du monde (et il y en a pas mal) ont encore une ABI assez ancrée
32bits.