Heim  >  Artikel  >  Backend-Entwicklung  >  Erklären Sie anhand eines Beispiels die Typqualifizierer „volatile“ und „restrict“ in der Sprache C

Erklären Sie anhand eines Beispiels die Typqualifizierer „volatile“ und „restrict“ in der Sprache C

王林
王林nach vorne
2023-09-10 22:25:01749Durchsuche

Typqualifizierer fügen spezielle Eigenschaften zu vorhandenen Datentypen in der Programmiersprache C hinzu.

Erklären Sie anhand eines Beispiels die Typqualifizierer „volatile“ und „restrict“ in der Sprache C

In der C-Sprache gibt es drei Typqualifizierer, von denen flüchtige und eingeschränkte Typqualifizierer wie folgt erklärt werden:

Volatile

Ein flüchtiger Typqualifizierer wird verwendet, um dem Compiler mitzuteilen, dass Variablen gemeinsam genutzt werden. Das heißt, wenn eine Variable als flüchtig deklariert ist, kann sie von anderen Programmen (oder Entitäten) referenziert und geändert werden.

Zum Beispiel volatile int x;

Einschränkungen

Dies funktioniert nur mit Zeigern. Es zeigt, dass Zeiger nur die erste Möglichkeit sind, auf referenzierte Daten zuzugreifen. Es bietet weitere Hilfe zur Compileroptimierung.

Beispielprogramm

Das Folgende ist ein C-Programm mit dem flüchtigen Typqualifizierer -

   int *ptr
   int a= 0;
   ptr = &a;
   ____
   ____
   ____
      *ptr+=4; // Cannot be replaced with *ptr+=9
   ____
   ____
   ____
      *ptr+=5;

Hier kann der Compiler die beiden Anweisungen *ptr+=4 und *ptr+=5 nicht durch eine Anweisung *ptr+=9 ersetzen. Denn es ist nicht klar, ob auf die Variable „a“ direkt (oder) über andere Zeiger zugegriffen werden kann.

Zum Beispiel:

   restrict int *ptr
   int a= 0;
   ptr = &a;
   ____
   ____
   ____
      *ptr+=4; // Can be replaced with *ptr+=9
   ____
   ____
      *ptr+=5;
____
   ____

Hier kann der Compiler zwei Anweisungen durch eine Anweisung ersetzen, *ptr+=9. Denn mit Sicherheit kann über keine andere Ressource auf die Variable zugegriffen werden.

Beispiel

Das Folgende ist ein C-Programm, das das Schlüsselwort „restrict“ verwendet –

Live-Demonstration

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

Ausgabe

Wenn das obige Programm ausgeführt wird, werden die folgenden Ergebnisse erzeugt –

40 50 30

Das obige ist der detaillierte Inhalt vonErklären Sie anhand eines Beispiels die Typqualifizierer „volatile“ und „restrict“ in der Sprache C. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen