Invalid conversion de unsigned char* char*

Voici un code -

  1 int main(int argc, char *argv[])
  2 {
  3     signed char S, *psc;
  4     unsigned char U,  *pusc;
  5     char C, *pc;
  6 
  7     C = S;
  8     C = U;
  9 
 10     pc = psc;
 11     pc = pusc;
 12 
 13     return 0;
 14 }

$ gcc test.cpp -o a
test.cpp: In function int main(int, char**)’:
test.cpp:10:7: error: invalid conversion from signed char*’ to char*’ [-fpermissive]
test.cpp:11:7: error: invalid conversion from unsigned char*’ to char*’ [-fpermissive]

C'est compilé sur la version de gcc 4.6.3 sur Ubuntu 12.10 sur un processeur Intel 32 bits de la machine.

Considérant que char type est unsigned char sur x86. -

Si les devoirs sur la ligne 7 et 8 pour les non-types de pointeur sont Ok, pourquoi les erreurs sont jetés pour les types pointeur sur les lignes 10 et 11 ?

Aussi, devrait C = U réussit sans nécessiter un plâtre?

Êtes-vous familier avec le terme de "strict alias" ?
La lecture de ce genre de choses ...
-fpermissive pourrait vous aider, et ignorer cette gêne. Juste de temps en temps, vous pouvez temporairement supprimer le tag de nouveau et de voir si votre compilateur trouve d'autres erreurs que celui-ci dans votre projet que vous doit s'inquiéter.
Notez également que vous pouvez le faire grâce à l'utilisation de void*s, si vous ne voulez pas utiliser un compilateur drapeau. Par exemple void* pc; serait de permettre que cela se produise, et déréférencer que vous avez à faire *((char*)pc). Alternativement, vous pouvez simplement utiliser un intermédiaire technique pour ne pas avoir à s'embêter avec la fonte (char*)pc chaque fois que vous déréférencement, comme void* pc_; pc_ = pusc; pc = pc_;, au détriment d'une inutile sizeof(ptr) octets supplémentaires dans la pile.

OriginalL'auteur nightlytrails | 2013-02-23