6
votes

Argument de type "volatile char *" est incompatible avec le paramètre de type "const char *"

J'ai une fonction dont le prototype est le suivant: xxx

ailleurs dans mon code, j'ai une variable globale déclarée comme suit xxx < p> Chaque fois que j'essaie de faire ceci: xxx

Le compilateur jette le message d'erreur suivant:

argument de type "volatile Char * "est incompatible avec le paramètre de type" const char * "

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> merci

- amr


0 commentaires

3 Réponses :


7
votes

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.


0 commentaires

9
votes

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);


0 commentaires

3
votes

Si vous souhaitez gérer un argument dans votre fonction, vous devez le déclarer comme tel: xxx

Cela ferait le tour. Mais soyez conscient que cela vous apporte également toutes les frais générales de volatile à la mise en oeuvre de foo , c'est-à-dire data [quelque chose] sera rechargé de la mémoire à tout moment que vous y accédez.

(généralement volatile 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.)


0 commentaires