ホームページ  >  記事  >  バックエンド開発  >  C言語のvolatile型修飾子とrestrict型修飾子を例を挙げて説明します。

C言語のvolatile型修飾子とrestrict型修飾子を例を挙げて説明します。

王林
王林転載
2023-09-10 22:25:01793ブラウズ

型修飾子は、C プログラミング言語の既存のデータ型に特別なプロパティを追加します。

C言語のvolatile型修飾子とrestrict型修飾子を例を挙げて説明します。

C 言語には 3 つの型修飾子があり、そのうちの volatile 型修飾子と制限付き型修飾子については次のように説明します。

Volatile

Yi Losing 型修飾子は、変数が共有されていることをコンパイラに伝えるために使用されます。つまり、変数が volatile として宣言されている場合、その変数は他のプログラム (または) エンティティによって参照および変更できます。

例: volatile int x;

制限事項

これはポインターでのみ機能します。これは、ポインターが参照データにアクセスする最初の方法にすぎないことを示しています。コンパイラの最適化に関するさらなるヘルプを提供します。

サンプル プログラム

次は、volatile 型修飾子の C プログラムです -

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

ここでは、コンパイラはステートメント *ptr =9 を使用できません。 2 つのステートメント *ptr =4 と *ptr =5 を置き換えます。なぜなら、変数「a」に直接 (または他のポインターを介して) アクセスできるかどうかが明確ではないからです。

たとえば、

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

ここでは、コンパイラは 2 つのステートメントを 1 つのステートメント *ptr =9 に置き換えることができます。確かに、他のリソースからは変数にアクセスできないからです。

次は、restrict キーワードを使用した C プログラムです。

ライブ デモンストレーション

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

出力

上記のプログラムを実行すると、が実行されると、次の結果が生成されます-

40 50 30

以上がC言語のvolatile型修飾子とrestrict型修飾子を例を挙げて説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。