avertissement: pointeur de type ‘void *’ utilisé dans l'arithmétique
Je suis de l'écriture et de la lecture des registres de la mémoire de la carte, comme ceci:
//READ
return *((volatile uint32_t *) ( map + offset ));
//WRITE
*((volatile uint32_t *) ( map + offset )) = value;
Cependant, le compilateur me donne des avertissements comme ceci:
warning: pointer of type ‘void *’ used in arithmetic [-Wpointer-arith]
Comment puis-je modifier mon code pour enlever les avertissements? Je suis à l'aide de C++ et Linux.
fonte à
Oui, c'est à droite de la carte est de type void*, merci.
Vous avez besoin de jeter
char*
- en supposant que vous voulez byte décalage. faites-vous?Oui, c'est à droite de la carte est de type void*, merci.
Vous avez besoin de jeter
map
à un pointeur vers un type de taille 1. Le seul type de garantie par la norme pour être de taille 1 est char
, donc vous devez le convertir en char*
.char
et les variantes (signed char
, unsigned char
), de sorte que c'est une coqueluche 3 types de taille 1
!OriginalL'auteur user1876942 | 2014-11-05
Vous devez vous connecter pour publier un commentaire.
Depuis
void*
est un pointeur vers un type inconnu vous ne pouvez pas faire de l'arithmétique des pointeurs, comme le compilateur ne sais pas quelle taille la chose souligné.Votre meilleur pari est de jeter
map
à un type qui est un octet, puis faire le calcul. Vous pouvez utiliseru_int8_t
pour cela:Il serait plus idiomatique en fonte à
char
, commesizeof(char)
est définie à 1.OriginalL'auteur Sean
De Type void est de type incomplète. Sa taille est inconnue. Si le pointeur de l'arithmétique avec des pointeurs void n'a pas de sens. Vous devez lancer le pointeur de type void pour un pointeur de certains autres, par exemple de type de pointeur de char.
Également prendre en compte le fait que vous ne pouvez pas affecter un objet déclaré avec le qualificatif volatile.
OriginalL'auteur Vlad from Moscow