Maison >développement back-end >C++ >Expliquer les qualificatifs de type volatile et restreint en langage C, avec un exemple

Expliquer les qualificatifs de type volatile et restreint en langage C, avec un exemple

王林
王林avant
2023-09-10 22:25:01820parcourir

Les qualificateurs de type ajoutent des propriétés spéciales aux types de données existants dans le langage de programmation C.

Expliquer les qualificatifs de type volatile et restreint en langage C, avec un exemple

Il existe trois qualificatifs de type en langage C, parmi lesquels les qualificatifs de type volatiles et restreints sont expliqués comme suit -

Volatile

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;

Limitations

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.

Exemple

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

Sortie

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer