Boo
Kevin Kofler - Posté le 10/02/2010 à 04:23 Membre depuis le 10/06/2001, 34834 messages
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é
squalyl - Posté le 10/02/2010 à 08:44 Membre depuis le 16/06/2001, 59704 messages
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
Folco - Posté le 10/02/2010 à 10:20 Membre depuis le 18/06/2001, 29769 messages
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©®™ >>>
Saint Qt, priez pour nous.
GoldenCrystal - Posté le 10/02/2010 à 10:22 Membre depuis le 15/06/2003, 7900 messages
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
Folco - Posté le 10/02/2010 à 10:29 Membre depuis le 18/06/2001, 29769 messages
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©®™ >>>
Saint Qt, priez pour nous.
squalyl - Posté le 10/02/2010 à 10:32 Membre depuis le 16/06/2001, 59704 messages
(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#
Folco - Posté le 10/02/2010 à 10:35 Membre depuis le 18/06/2001, 29769 messages
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©®™ >>>
Saint Qt, priez pour nous.
squalyl - Posté le 10/02/2010 à 10:37 Membre depuis le 16/06/2001, 59704 messages
comme un peintre en ascii art, des petits & , * et () un peu partout et hop #hehe#
Folco - Posté le 10/02/2010 à 10:38 Membre depuis le 18/06/2001, 29769 messages
N'est-ce pas ? Quel manque de goût ce compilo quand même grin
avatar <<< Kernel Extremist©®™ >>>
Saint Qt, priez pour nous.
Folco - Posté le 10/02/2010 à 11:03 Membre depuis le 18/06/2001, 29769 messages
avatar <<< Kernel Extremist©®™ >>>
Saint Qt, priez pour nous.
squalyl - Posté le 10/02/2010 à 12:28 Membre depuis le 16/06/2001, 59704 messages
je savais que ça te plairait #hehe#
Folco - Posté le 10/02/2010 à 12:57 Membre depuis le 18/06/2001, 29769 messages
Tu m'étonnes grin

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

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

cheeky
avatar <<< Kernel Extremist©®™ >>>
Saint Qt, priez pour nous.
squalyl - Posté le 10/02/2010 à 13:00 Membre depuis le 16/06/2001, 59704 messages
certes cheeky
GoldenCrystal - Posté le 10/02/2010 à 13:02 Membre depuis le 15/06/2003, 7900 messages
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
Folco - Posté le 10/02/2010 à 13:08 Membre depuis le 18/06/2001, 29769 messages
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©®™ >>>
Saint Qt, priez pour nous.
Zerosquare - Posté le 10/02/2010 à 17:09 Membre depuis le 27/04/2006, 43189 messages
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
squalyl - Posté le 10/02/2010 à 17:34 Membre depuis le 16/06/2001, 59704 messages
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*.
Zerosquare - Posté le 10/02/2010 à 17:38 Membre depuis le 27/04/2006, 43189 messages
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
squalyl - Posté le 10/02/2010 à 17:40 Membre depuis le 16/06/2001, 59704 messages
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.
Lionel Debroux - Posté le 10/02/2010 à 19:25 Membre depuis le 28/10/2001, 7564 messages
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.