- Posté le 10/02/2010 à 04:23 Membre depuis le 10/06/2001, 34991 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é
- Posté le 10/02/2010 à 08:44 Membre depuis le 16/06/2001, 59978 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
- Posté le 10/02/2010 à 10:20 Membre depuis le 18/06/2001, 30165 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.
- Posté le 10/02/2010 à 10:22 Membre depuis le 15/06/2003, 7956 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
- Posté le 10/02/2010 à 10:29 Membre depuis le 18/06/2001, 30165 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.
- Posté le 10/02/2010 à 10:32 Membre depuis le 16/06/2001, 59978 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
- Posté le 10/02/2010 à 10:35 Membre depuis le 18/06/2001, 30165 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.
- Posté le 10/02/2010 à 10:37 Membre depuis le 16/06/2001, 59978 messages
comme un peintre en ascii art, des petits & , * et () un peu partout et hop hehe
- Posté le 10/02/2010 à 10:38 Membre depuis le 18/06/2001, 30165 messages
N'est-ce pas ? Quel manque de goût ce compilo quand même grin
avatar <<< Kernel Extremist©®™ >>>
Saint Qt, priez pour nous.
- Posté le 10/02/2010 à 11:03 Membre depuis le 18/06/2001, 30165 messages
avatar <<< Kernel Extremist©®™ >>>
Saint Qt, priez pour nous.
- Posté le 10/02/2010 à 12:28 Membre depuis le 16/06/2001, 59978 messages
je savais que ça te plairait hehe
- Posté le 10/02/2010 à 12:57 Membre depuis le 18/06/2001, 30165 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.
- Posté le 10/02/2010 à 13:00 Membre depuis le 16/06/2001, 59978 messages
certes cheeky
- Posté le 10/02/2010 à 13:02 Membre depuis le 15/06/2003, 7956 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
- Posté le 10/02/2010 à 13:08 Membre depuis le 18/06/2001, 30165 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.
- Posté le 10/02/2010 à 17:09 Membre depuis le 27/04/2006, 43576 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
- Posté le 10/02/2010 à 17:34 Membre depuis le 16/06/2001, 59978 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*.
- Posté le 10/02/2010 à 17:38 Membre depuis le 27/04/2006, 43576 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
- Posté le 10/02/2010 à 17:40 Membre depuis le 16/06/2001, 59978 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.
- Posté le 10/02/2010 à 19:25 Membre depuis le 28/10/2001, 7573 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.