172Fermer174
deleted2Le 14/11/2010 à 21:05
Bon, je ressors ce topic un peu au hasard, il fera l'affaire.


Il y a un truc que je ne comprends pas du tout avec l'arithmétique des pointeurs void :
Soit ce code :
void* ArcPtr;
void* ArcBasePtr;
long Offset;

// initialisations toussa

ArcPtr = ArcBasePtr + Offset;

Ben... Ca marche bigeyes

J'arrive à additionner un long à un void* sans qu'il ne trouve rien à redire. Il est magicien ? Si je regarde mon bouquin, il y est explicitement dit que :
Le type void* ne peut pas être soumis à des calculs arithmétiques

Exemple :
void *ad1, *ad2;
ad1 ++; // interdit
ad2 = ad1 + 5; // interdit

On notera que ces interdictions sont justifiées si l'on part du principe qu'un pointeur générique est simplement destiné à être manipulé en tant que tel, par exemple pour être transmis d'une fonction à une autre. En revanche, elles le sont moins si l'on considère qu'un tel pointeur peut aussi servir à manipuler des octets successifs ; dans ce cas, il faudra quand même recourir au type char*.


Je ne comprends donc pas :
- ça compile
- ça semblerait malgré tout interdit (et ça semble logique... encore que... niveau assembleur c'est bateau comme opération)

Je ne sais pas par contre ce que ça génère, et surtout si c'est safe, quelles sont les règle en la matière !

Merci de vos éclaircissations. smile