2017-02-23 2 views
-2

私はunsigned const volatile short int*です。私はそれが定義時に0に設定されている(x + y)が欲しいです。しかし、何らかの理由でyが5に変わったら、unsigned const volatile short int*も変更したいと思っています。何かがconst volatile intの場合、変数のステータスに基づいて変更できますか?

これはCでも可能ですか?

(注:私はGNUの拡張で、自立C99モードを使用していて、それが機能して自動的なく変更するために私が意味する)

+0

Cの変数は値を再解析的に更新しません。依存関係のシステムはありません(スプレッドシートとは異なります)。また、実際に 'const'にしたくない場合は' const'を削除してください。そして 'const'は' volatile'と矛盾していませんか? –

+0

ポインタは 'const'修飾子ではありませんので、もちろん変更可能です。 – Olaf

+0

@WeatherVaneいいえ、constはvolatileと矛盾しません。 [彼らはCで直交している](http://stackoverflow.com/questions/4592762/difference-between-const-const-volatile)。 –

答えて

1

のような他の変数に基づいて自動的に更新変数を作成する方法はありません

xyの合計を変数に格納する代わりに、必要なときに合計を再計算する関数を作成するだけで十分です。さらにはかなり高速である必要があります:

int get_the_sum() 
{ 
    return x + y; 
} 

また、あなたはxを行うことを検討してyのみセッター機能を変更することができ、静的変数であるかもしれません。 xyのセッター関数は、更新が必要な変数の更新を行います。このアプローチがあなたのアプリケーションについてもっと知らなくても価値があるかどうかは分かりません。

void change_y(int new_y) 
{ 
    y = new_y; 
    sum = x + y; 
} 
0

y

volatile unsigned short int y = -x; 

(または同等)として宣言されているとすると、とyの値が5から最初に異なることは、

unsigned const volatile short int *p = &y; 

この意志を定義することができあなたが指定しなかった条件を課しますが、提示した要件を満たしています。上記に明示的に記載されたものに加えて、yの変更に応じて変更を必要とするが、xの変更に対する応答には言及しないという事実は、指し示された値が実際に応答する必要がないことを意味する。 xの変更。

もちろん、私はこれがあなたが本当に意味するものを全く表さないと思う傾向があります。 はCで実装することはできません。ポインタはメモリ内の場所を参照しますが、x + yなどの式の値はメモリにありません。

関連する問題