1620

Sauf qu'en C, t'es obligé de partir de ce principe si je ne m'abuse, parce que tu n'as aucun moyen de savoir ce qu'il y a réellement derrière un char.

1621

Tu ne peux pas tester la réaction suite à un débordement ? (si 255+1 = 0, par exemple, tu as la taille de ton char, non ?)
avatar

1622

Si ce comportement est normalisé, sûrement.
Qqchose genre
unsigned int n = 255;
(unsigned char) n ++;
if (n == 0)
...

(avec sizeof (int) >= 2* sizeof (char)), et si t'es en signé ça marchera pas)

1623

Bon, d'après mon bouquin, le comportement n'est pas défini par la norme en cas d'overflow, même si la majorité des implémentations perdent tout simplement les bits les plus forts, comme on s'y attend (genre 255 + 2 = 1).
Donc ça marchera la plupart du temps, mais ça n'a l'air jamais garanti.

1624

^^Évidemment, un cast sur un opérateur unaire, ça me paraît bizarre.
^Pour la plupart des implémentations, c'est sûrement défini dans leur documentation.

@Kevin: On ne peut pas toujours mettre à jour les programmes.
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

1625

Arf (j'étais pourtant content de mon idée cheeky)
avatar

1626

Il y a toujours la macro CHAR_BIT sinon, mais je ne sais plus exactement ce qu'elle garantit à propos de la taille (c'est peut-être seulement un "au moins cette valeur").
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

1627

Link (./1624) :
^^Évidemment, un cast sur un opérateur unaire, ça me paraît bizarre.

Et pourquoi ?

1628

GoldenCrystal (./1602) :
contrairement à UTF-8 qui peut aller jusqu'à 8 octets4 octets.

six, pour stocker jusqu'a 0xFFFFFFFF
Brunni (./1611) :
Alors peu de compilos le respectent, vu que c'est pareil pour les µC ^^

trifus
sdcc a des int de 16 bits sur toutes ses plate formes, et le compilo ST du boulot aussi, au moins

1629

Link (./1624) :
^^Évidemment, un cast sur un opérateur unaire, ça me paraît bizarre.
Et pourquoi ?

À la réflexion, c'est parce que pour moi le résultat d'un cast est une rvalue.
En ajoutant des parenthèses pour clarifier, on a alors deux cas:
* (unsigned char)(n++) qui n'a aucun effet sur l'opérateur lui-même, seulement la valeur retournée (normal)
* ((unsigned char)n)++ qui selon moi ne devrait pas compiler.

Note: Par contre, "opérateur unaire" n'était pas forcément le bon terme, vu que je parlais ici uniquement des pre/post inc/decrémentation. Naturellement, un '-' unaire ou une '*' n'ont pas ce problème.
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

1630

Link (./1629) :
* ((unsigned char)n)++ qui selon moi ne devrait pas compiler.

tu as raison.

1631

squalyl (./1628) :
sdcc a des int de 16 bits sur toutes ses plate formes, et le compilo ST du boulot aussi, au moins

SDCC il est bien. Après t'as des trucs un peu plus chelou où c'est juste pas le cas. Je pense au compilo de Sensory de mémoire, et encore ailleurs mais j'arrive plus à me souvenir exactement - en tous cas j'ai halluciné. Là le C n'est absolument pas fait pour faire des progs portables, mais juste pour réutiliser une partie des connaissances des codeurs.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

1632

ben alors le compilo de Sensory il sux (ça compile pour quoi ce truc que je connais pas?)

1633

C'est pas parce que tu connais pas que ça sux happy Le fait est que ça existe, et c'est assez courant à ce que j'ai entendu. Mon boss qui est ingé dans l'embarqué m'avait tout de suite fusillé quand il a vu que j'osais essayer d'utiliser des 'long' grin qui évidemment produisaient des résultats erronés pour une simple addition suivant le contexte.
Ce truc compile pour leur µC, qui doit être un bête 8502 de mémoire (j'ai plus sous les yeux, j'y travaille plus).
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

1634

enfin un compilo qui sait pas additionner deux longs, même sur un 8 bits, il sux grin

que ça soit interdit car lanterne, ok, mais si ça marche pas, on accuse le compilo, pas le dev grin

1635

squalyl (./1628) :
GoldenCrystal (./1602) :
contrairement à UTF-8 qui peut aller jusqu'à 8 octets4 octets.
six, pour stocker jusqu'a 0xFFFFFFFF
Mais l'Unicode ne va que jusqu'à 0x10FFFF ... C'est d'ailleurs pour ça que je soutiens que l'UTF-32 est un gâchis de place énorme. Même un hypothétique UTF-24 laisserait 3 bits en plan, ça serait déjà beaucoup mieux niveau espace, mais pas performances... Bref, vive l'UTF-16 tongue
Kevin Kofler (./1618) :
To say a bit more on the topic, yes he is right -- it would make some operations much easier.
Bah oui, c'est bien pour ça que le reste du monde est passé à l'UTF-8.
Tu veux dire les 0.15% restant une fois qu'on a décompté Windows, Mac OS X (Cocoa), .NET, Java, Qt & co. ? Bon j'ai balancé le %age au pif, mais sachant que Linux = environ 1% de pdm...)
Le seul endroit où l'UTF-8 est vraiment exploité, c'est le Web (bien que l'UTF-16 soit un choix valide et autorisé). L'UTF-8 est bien pour l'échange de données, pas comme représentation interne. tongue
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

1636

(bah, il suffit de stocker d'autres choses dans les msb trioui)

1637

Zerosquare (./1610) :
Auquel cas, ton compilateur ne respecte pas le standard (un int doit avoir au moins 16 bits).



Non INT c'est la taille "native" du mot mémoire (celon le K&R, et le C90 si j'ai bonne mémoire) donc un CPU 8bit, int = 8 bits, etc...
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

1638

Oui, mais ça n'empêche qu'il est censé faire 16 bits au minimum (j'ai vérifié dans le K&R).
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

1639

Ok c'est encore pire que prévu. De toute maniere je banni "int" a vue ^^
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

1640

Pareil, inttypes.h FTW !
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

1641

S'il est là tongue
Perso je définis dans mes projets perso des trucs du genre:
typedef unsigned char u8;
typedef signed char s8;
typedef unsigned short u16;
typedef signed short s16;
typedef unsigned long u32;
typedef signed long s32;

Et j'adapte suivant la plate-forme (je mets ça dans le même section que le code endian-critique). Ca permet d'avoir les ambiguïtés au niveau du signe aussi.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

1642

^^Quelle est exactement la différence entre inttypes.h et stdint.h?
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

1643

Zerosquare (./1640) :
Pareil, inttypes.h FTW !

Idem pour les trucs un peu critiques ou tutoyant les limites d'un type, mais pour un compteur de boucle de 1 à 10, int est plus rapide à taper

1644

Question d'habitude smile
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

1645

D'où mes noms de type à 2~3 caractères ^^ u32 i; est bien plus agréable à taper que unsigned i;
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

1646

\o/ GCC vient de me laisser faire:
const u32 colors[] = {
    colors[0], colors[1], colors[2], colors[3]
};

Je voulais évidemment accéder à ma propriété colors, mais il trouve rien de mieux que prendre les éléments du tableau que je suis en train d'initialiser... je pouvais bien chercher pourquoi c'était tout noir tripaf
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

1647

Je me suis déjà fait avoir de la même façon... Kevin m'avait répondu que c'était pas un bug, mais je ne me rappelle plus de la justification...
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

1648

Bah à ce niveau rien n'est un bug normalement, mais c'est quand même... discutable niveau conceptuel happy
Sinon un truc que je tombe totalement des nues c'est ça:
class Colored {
	void set(int c) {
		color = c;
	}
public:
	int color;
};

Ca compile, et ça marche. Je ne comprends ab-so-lu-ment pas pourquoi. confus Il fait une deuxième passe pour déjà connaître 'color' dans le corps de 'set'? Je croyais que c'était pas le cas.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

1649

Dans son bouquin, Stroustrup conseille de déclarer les attributs (et tout ce qui est privé) à la fin de la classe. Perso j'ai toujours fait comme ça.

1650

Link (./1624) :
@Kevin: On ne peut pas toujours mettre à jour les programmes.

C'est bien pour ça que les logiciels propriétaires, ça sux! Sous GNU/Linux, on refuse par principe d'introduire des workarounds pour les applications boguées, et ça ne dérange pas tant que ça, sauf pour les quelques applications propriétaires qui n'arrêtent pas de casser. Quand il y a un problème avec un logiciel libre, quelqu'un le corrige et pouf, il n'y a plus de problème! tongue
GoldenCrystal (./1635) :
Tu veux dire les 0.15% restant une fois qu'on a décompté Windows, Mac OS X (Cocoa), .NET, Java, Qt & co. ?

OS X utilise des locales UTF-8 par défaut, tout comme GNU/Linux etc. Maintenant, il y a des toolkits qui utilisent l'UTF-16 par dessus, mais le codage système, et le codage utilisé partout où on a besoin d'un codage "8 bits" (c'est-à-dire compatible ASCII), c'est l'UTF-8. Il n'y a vraiment qu'un seul système qui persiste à utiliser des codepages 8 bits obsolètes et à essayer de forcer tout le monde de passer à l'UTF-16 pour gérer le Unicode, même quand ça implique d'être incompatible avec les APIs existantes et portables parce qu'elles travaillent avec des chaînes de caractères 8 bits (pratiquement toutes les APIs C, par exemple).
Zerosquare (./1638) :
Oui, mais ça n'empêche qu'il est censé faire 16 bits au minimum (j'ai vérifié dans le K&R).

Le K&R n'est pas un document normatif. Mais ton affirmation est correcte d'après 6.2.5 §5 et 5.2.4.2.1 §1 (11ème et 12ème énumérés) du standard ISO C99 (cf. le document n1256.pdf WG14/N1256 ISO/IEC 9899:TC3 téléchargeable gratuitement) qui garantissent que int doit pouvoir représenter au moins l'ensemble [-32767,32767] ∩ ℤ. (Je signale cependant que -32768 n'est pas garanti être représentable dans un int, parce que la représentation "complément de 2" n'est pas obligatoire.)
Link (./1642) :
^^Quelle est exactement la différence entre inttypes.h et stdint.h?

inttypes.h inclut stdint.h et rajoute des trucs en plus.
Brunni (./1646) :
\o/ GCC vient de me laisser faire:
const u32 colors[] = {
    colors[0], colors[1], colors[2], colors[3]
};

Je voulais évidemment accéder à ma propriété colors, mais il trouve rien de mieux que prendre les éléments du tableau que je suis en train d'initialiser... je pouvais bien chercher pourquoi c'était tout noir tripaf
Zerosquare (./1647) :
Je me suis déjà fait avoir de la même façon... Kevin m'avait répondu que c'était pas un bug, mais je ne me rappelle plus de la justification...

C'est parce que int x=x; est la manière proposée par GCC pour supprimer les warnings au sujet des variables non initialisées (quand il y a un faux positif).
Brunni (./1648) :
Il fait une deuxième passe pour déjà connaître 'color' dans le corps de 'set'? Je croyais que c'était pas le cas.

Contrairement au C, le C++ n'est pas un langage parsable en une seule passe linéaire.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité