30
Posted on the 2010-02-10 at 04:23am Member since 2001-06-10, 37345 posts
Ce n'est pas normal de devoir écrire ce genre de casts, c'est plutôt un indice que tu essaies d'écrire du C comme si c'était de l'assembleur. hehe
avatar Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
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é
31
Posted on the 2010-02-10 at 08:44am Member since 2001-06-16, 63394 posts
pareil grin

ça raye les yeux ce cast grin


pourquoi pas FilePtr + FileSize - 5?

d'ailleurs ça va foirer pour autre chose que du x86
32
Posted on the 2010-02-10 at 10:20am Member since 2001-06-18, -30588 post
Le truc, c'est que mon FilePtr est le résultat d'un HeapDeref, donc un void*

Puis je dois calculer l'offset du char FilePtre + FileSize - 5 (merci squalyl, j'y ai pensé j'étais déjà couché grin). Je dois donc caster en char*
Puis il me faut un void pour memcmp, donc re-cast en void*.
Ya un autre moyen ?

Il vut pas de l'opérateur & quand j'écris ça :
(void*)&((char*)FilePtr + FileSize - 5)

D'abord je comprends pas pourquoi, et ensuite je vois pas comment faire autrement qu'éviter ces deux casts...
avatar <<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
33
Posted on the 2010-02-10 at 10:22am Member since 2003-06-15, 8324 posts
Normalement y'a pas besoin de cast en void*.
Et tu peux pas obtenir un pointeur sur une valeur 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
34
Posted on the 2010-02-10 at 10:29am Member since 2001-06-18, -30588 post
Eh merde... je m'en doutais.... alors je fais comment pour récupérer ce p**ain de pointeur en plein milieu de mon tableau ? J'ai essayé de fooler le compilo avec diverses écritures hier soir, sans y arriver :/

Mais le cast en char* reste obligatoire, ça se déréférence par un void* ... Bref, ça reste pas splendide...
avatar <<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
35
Posted on the 2010-02-10 at 10:32am Member since 2001-06-16, 63394 posts
(void*)&((char*)FilePtr + FileSize - 5)

non mais non là grin
qu'est ce qu'il vient foutre au milieu ce &? grin

FilePtr est déja un pointeur vers ce que tu veux, il pointe juste quelques octets avant, et il a éventuellement pas le bon type. Donc a la limite tu pourrais faire

(void*)((char*)FilePtr + FileSize - 5)

mais vu que void* et char* se comportent de la même manière, tu peux carrément virer tous les casts.

a abuser un compilo, autant le faire proprement trifouet
36
Posted on the 2010-02-10 at 10:35am Member since 2001-06-18, -30588 post
Ah oui n'importe quoi triso Ca m'apprendra à faire un truc sans réfléchir, putain la honte triso

Don au final, FilePtr + FileSize - 5 marche très bien. trioui Tout ça pour essayer de faire bien à la base, n'importe quoi mur
avatar <<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
37
Posted on the 2010-02-10 at 10:37am Member since 2001-06-16, 63394 posts
comme un peintre en ascii art, des petits & , * et () un peu partout et hop hehe
38
Posted on the 2010-02-10 at 10:38am Member since 2001-06-18, -30588 post
N'est-ce pas ? Quel manque de goût ce compilo quand même grin
avatar <<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
39
40
Posted on the 2010-02-10 at 11:03am Member since 2001-06-18, -30588 post
avatar <<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
41
Posted on the 2010-02-10 at 12:28pm Member since 2001-06-16, 63394 posts
je savais que ça te plairait hehe
42
Posted on the 2010-02-10 at 12:57pm Member since 2001-06-18, -30588 post
Tu m'étonnes grin

Tiens, j'm'a fait baysay :
*((char*)FilePtr + FileSize + 1)

!=
*(char*)FilePtr + FileSize + 1

cheeky
avatar <<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
43
Posted on the 2010-02-10 at 01:00pm Member since 2001-06-16, 63394 posts
certes cheeky
44
Posted on the 2010-02-10 at 01:02pm Member since 2003-06-15, 8324 posts
C'est un peu évident quand même cheeky
Faut bien réfléchir à la priorité des opérateurs quand tu codes ^^
Le cast heu déréférencement c'est un "opérateur" avec une des priorités les plus élevées, donc évidemment, ça passe avant le + et beaucoup d'autres smile
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
45
Posted on the 2010-02-10 at 01:08pm Member since 2001-06-18, -30588 post
Oui, je m'en suis rendu compte à la relecture, donc j'ai pas galéré dessus. bizarement ça m'a sauté aux yeux, alors que j'y ai même pas pensé quand j'ai écrit...
avatar <<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
46
Posted on the 2010-02-10 at 05:09pm Member since 2006-04-27, 49482 posts
squalyl (./35) :
vu que void* et char* se comportent de la même manière
Sûr ? #doute#
avatarZeroblog

« 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
47
Posted on the 2010-02-10 at 05:34pm Member since 2001-06-16, 63394 posts
bah teste mais tu verrais quoi comme différence a part que tu peux pas deref un void*?

ma remarque vaut surtout que x+3 pointe 3 octets après x , que x soit un char* ou un void*.
48
Posted on the 2010-02-10 at 05:38pm Member since 2006-04-27, 49482 posts
Justement, je sais que ça semble marcher en pratique, mais je ne sais pas si c'est garanti par le standard C.

Du point de vue logique c'est un peu embêtant : si tu fais pointeur += 3, le pointeur est censé avancer de (3 * taille du type de pointeur) octets. Or void ne représente justement aucun type en particulier...
avatarZeroblog

« 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
49
Posted on the 2010-02-10 at 05:40pm Member since 2001-06-16, 63394 posts
j'ai vraiment la flemme de ressortir le doc ISO C89 ou 99 (chaipa) mais il me semble qu'il mentionne que sizeof(void) = 1 quand on s'en sert comme pointeur.

en cherchant vite ça semblerait être une extension gcc... merdalors.

bon, m'en fous, j'utilise que gcc , mais c'est bon a savoir.
50
Posted on the 2010-02-10 at 07:25pm Member since 2001-10-28, 7627 posts
C'est une extension GCC, en effet.
L'utiliser ou pas est une question de goût - personnellement, je n'aime pas, et c'est une introduction gratuite d'importabilité bien connue entre compilos.
avatar Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.