structの特定のメンバーをvolatileとして宣言するにはどうすればよいですか?Cでは、構造体のメンバーをvolatileとしてどのように宣言しますか?
16
A
答えて
25
非struct
フィールドとまったく同じ:
#include <stdio.h>
int main (int c, char *v[]) {
struct _a {
int a1;
volatile int a2;
int a3;
} a;
a.a1 = 1;
a.a2 = 2;
a.a3 = 3;
return 0;
}
あなたは"volatile struct _a {...}"
を使用するなど、揮発性の全体struct
をマークすることができますが、上記の方法は、個々のフィールドのためです。
9
がthis記事によると、かなりまっすぐ進むことが必要です。
最後に、あなたが 構造体または共用体に揮発適用した場合、コンテンツ全体構造体/共用体の は揮発性です。 この動作が必要ない場合は、 構造体/共用体の個々のメンバー にvolatile修飾子を適用できます。
1
C/C++のvolatileキーワードに関する警告です。
何をしているのか分からない限り、決して使用しないでください。あなたは本当にあなたが何をしているか知っている限り
揮発性
C/C++揮発!=のJava/C#の揮発性は、スレッド化コードでは役に立たない、あなたはC++ 0xのアトミックテンプレート(または類似したもの)を使用する必要があります。
ハードウェアレジスタを制御するときだけ揮発性を使用しなければなりませんでした。
0
もしvolatileの宣言されたメンバが何らかの割り込み(シグナルハンドラや他の原子に近い)のために変更されていない場合は、おそらくvolatileを使用してはいけません(ほとんどのコンパイラは、十分に近く)。それ以外の場合は
、他の人が言ってきたように...ちょうどそれらをチェックし、その価値は...のgccすなわち特定のバージョン、ASMは、コンパイラが実際にあなたに同意する場合:)
いくつかのケースで見てダンプを調べて、それを使用しますダンプ。
関連する問題
- 1. ポインタを構造体として宣言できますか?
- 2. Cの構造体宣言の配列
- 3. Cの構造体の前方宣言?
- 4. はなぜ構造体を作成した構造体宣言
- 5. 宣言構造体
- 6. C#で埋め込み構造体を宣言するにはどうすればよいでしょうか?
- 7. Cはどのように構造体を返しますか?
- 8. C言語では、構造体の2つのメンバーを比較します。
- 9. 構造体をC言語で宣言せずに宣言する
- 10. 一部のメンバーだけが別の構造体の値を使用できる構造体を宣言するにはどうすればいいですか?
- 11. Cでの構造体と多次元配列のグローバル宣言
- 12. インライン構造体宣言
- 13. Cの構造体を指す構造体のポインティング・メンバー
- 14. 構造体宣言で空のカッコはどういう意味ですか?
- 15. C# - クラス構造体またはインターフェイスメンバー宣言の無効なトークン ''
- 16. 別の構造体内で構造体を宣言し、プライベートとして宣言されたときに問題にアクセスする
- 17. C構造体のtypedefのと宣言原因ポインタエラー
- 18. Cプログラミングのデカップリングインターフェイスから構造体前方宣言を使用して
- 19. C - 私は構造体を宣言することができます
- 20. は、C++の構造体のメンバーにアクセスするときにこのエラーが供給構造体の配列を処理しようとしているが、イム
- 21. C - 構造体と関数の前方宣言
- 22. 動的に私は、次の構造体を宣言した...
- 23. 構造体へのポインタとして構造体をマーシャリングするにはどうすればよいですか?
- 24. 構造体へのグローバルポインタの宣言
- 25. Lispのメンバーと構造体
- 26. Go Relflect構造体を宣言する
- 27. 配列はCプログラミング言語の構造体および共用体とどう違うのですか?
- 28. C:宣言後に構造体変数を初期化する
- 29. Cでどのように構造体の配列を作成しますか?
- 30. Cで構造体のメモリをどのように管理しますか?
私は厳密に必要とされるよりも少し強いと述べました。 volatileはスレッドコード、特にシングルコアの組み込みプラットフォームで役立ちます。しかし、あなたはそれを使う方法を知っていなければなりません。また、DMAの有無にかかわらずハードウェアレジスタを参照する場合、特にステータスのためにポーリングされるレジスタを参照する場合には、事実上必須です。また、キャッシュとそれを正しく管理する方法を理解し、プラットフォーム上でアトミック操作を実行する方法を理解することも必要です。 – RBerteig
あなたは正しいです。私はDMAと言ったときに私が思っていたことを知らなかった、私はMMIOを意味した。私は何か良い答えを編集しました(私は願っています)。 –
ウィキペディア(http://en.wikipedia.org/wiki/Volatile_variable)によると、C#はC/C++と同じ動作をしているように見えますが、Javaだけが異なるセマンティックを持っています。 –