J'ai une fonction dont le prototype est le suivant: ailleurs dans mon code, j'ai une variable globale déclarée comme suit p> Le compilateur jette le message d'erreur suivant: p> argument de type "volatile Char * "est incompatible avec le paramètre de type" const char * " fort> p> pourquoi est-ce le cas? Si je comprends bien, la variable de ma fonction n'est pas autorisée à modifier le pointeur ou son contenu. Je comprends que parce que ma variable globale est volatile, elle pourrait potentiellement changer à tout moment, mais qu'il est parfaitement légal d'avoir une variable de const volatilité, je ne vois pas pourquoi je reçois cette erreur de compilateur. P> < p> merci p> - amr p> p>
3 Réponses :
Par conséquent, car accédant à une variable volatilive à l'aide de pointeur à non volatile est incorrect. Soit l'objet est volatile et il faut ensuite y accéder comme partout ou que vous pouvez y accéder comme non volatil, puis il ne doit pas être marqué comme tel. Décidez votre esprit. P>
C'est parce que les conversions implicites peuvent ajouter em> qualificatifs à la cible des types de pointeur, mais ne les suppriment pas. Donc, si vous souhaitez que votre fonction puisse accepter volatile ou / ou
const code> Les pointeurs qualifiés, vous devez le déclarer avec les deux:
void foo(const volatile char * data);
Si vous souhaitez gérer un argument code> code> dans votre fonction, vous devez le déclarer comme tel: Cela ferait le tour. Mais soyez conscient que cela vous apporte également toutes les frais générales de (généralement volatile code> à la mise en oeuvre de
foo code>, c'est-à-dire
data [quelque chose] code> sera rechargé de la mémoire à tout moment que vous y accédez. p>
volatile code> n'est pas tellement une bonne idée, sauf si vous faites des pilotes de périphérique ou donc. Même pour le traitement parallèle avec des threads ne garantit généralement pas ce que vous attendez sur un premier site.) p> p>