Maison > Article > développement back-end > Expliquer les qualificatifs de type volatile et restreint en langage C, avec un exemple
Les qualificateurs de type ajoutent des propriétés spéciales aux types de données existants dans le langage de programmation C.
Il existe trois qualificatifs de type en langage C, parmi lesquels les qualificatifs de type volatiles et restreints sont expliqués comme suit -
Un qualificatif de type volatile est utilisé pour indiquer au compilateur que les variables sont partagées. Autrement dit, si une variable est déclarée volatile, elle peut être référencée et modifiée par d'autres programmes (ou) entités.
Par exemple, volatile int x;
Cela ne fonctionne qu'avec des pointeurs. Cela montre que les pointeurs ne constituent que le premier moyen d’accéder aux données référencées. Il fournit plus d'aide pour l'optimisation du compilateur.
Exemple de programme
Ce qui suit est un programme C avec un qualificatif de type volatile -
int *ptr int a= 0; ptr = &a; ____ ____ ____ *ptr+=4; // Cannot be replaced with *ptr+=9 ____ ____ ____ *ptr+=5;
Ici, le compilateur ne peut pas remplacer les deux instructions *ptr+=4 et *ptr+=5 par une seule instruction *ptr+=9. Parce qu'il n'est pas clair si la variable "a" est accessible directement (ou) via d'autres pointeurs.
Par exemple,
restrict int *ptr int a= 0; ptr = &a; ____ ____ ____ *ptr+=4; // Can be replaced with *ptr+=9 ____ ____ *ptr+=5; ____ ____
Ici, le compilateur peut remplacer deux instructions par une seule, *ptr+=9. Parce que, bien sûr, la variable n’est accessible via aucune autre ressource.
Ce qui suit est un programme C utilisant le mot-clé restrict -
Démonstration en direct
#include<stdio.h> void keyword(int* a, int* b, int* restrict c){ *a += *c; // Since c is restrict, compiler will // not reload value at address c in // its assembly code. *b += *c; } int main(void){ int p = 10, q = 20,r=30; keyword(&p, &q,&r); printf("%d %d %d", p, q,r); return 0; }
Lorsque le programme ci-dessus est exécuté, les résultats suivants sont produits -
40 50 30
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!