Posté le 10/02/2010 à 04:23 Membre depuis le 10/06/2001, 39765 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
avatarMes 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, 68665 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, -26409 message
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) !
Posté le 10/02/2010 à 10:22 Membre depuis le 15/06/2003, 8330 messages
Normalement y'a pas besoin de cast en void*.
Et tu peux pas obtenir un pointeur sur une valeur tongue
avatarLe 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, -26409 message
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) !
Posté le 10/02/2010 à 10:32 Membre depuis le 16/06/2001, 68665 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, -26409 message
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) !
Posté le 10/02/2010 à 10:37 Membre depuis le 16/06/2001, 68665 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, -26409 message
N'est-ce pas ? Quel manque de goût ce compilo quand même grin
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 10/02/2010 à 11:03 Membre depuis le 18/06/2001, -26409 message
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 10/02/2010 à 12:28 Membre depuis le 16/06/2001, 68665 messages
je savais que ça te plairait hehe
Posté le 10/02/2010 à 12:57 Membre depuis le 18/06/2001, -26409 message
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) !
Posté le 10/02/2010 à 13:00 Membre depuis le 16/06/2001, 68665 messages
certes cheeky
Posté le 10/02/2010 à 13:02 Membre depuis le 15/06/2003, 8330 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
avatarLe 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, -26409 message
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) !
Posté le 10/02/2010 à 17:09 Membre depuis le 27/04/2006, 59088 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, 68665 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, 59088 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, 68665 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, 7604 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.
avatarMembre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.