揮発性構造セマンティクス
2023-09-23 17:29:07
質問
構造体型変数のインスタンスを volatile と宣言するだけで十分ですか (そのフィールドがリエントラントなコードでアクセスされる場合)、それとも構造体の特定のフィールドを volatile と宣言しなければなりませんか?
別の言い方をすると、(もしあれば)意味上の違いは何ですか。
typdef struct {
uint8_t bar;
} foo_t;
volatile foo_t foo_inst;
と
typedef struct{
volatile uint8_t bar;
} foo_t;
foo_t foo_inst;
私は、ポインタ型変数を volatile と宣言すること (例えば volatile uint8_t * foo) は、単に foo が指すアドレスが変わるかもしれないとコンパイラに知らせるだけで、foo が指す値については何も宣言していないことを認識しています。この類似性が構造体型の変数に当てはまるかどうかは、私には不明です。
どのように解決するのか?
あなたの例では、2つは同じです。 しかし、問題はポインターを中心に展開されます。
まず最初に
volatile uint8_t *foo;
は、指されたメモリが揮発性であることをコンパイラに伝えます。 もし、ポインタ自体を揮発性であるとマークしたい場合は
uint8_t * volatile foo;
そしてこれが、構造体をvolatileとしてマークすることと、個々のフィールドをマークすることの主な違いになります。 もし、あなたが
typedef struct
{
uint8_t *field;
} foo;
volatile foo f;
というような挙動になる。
typedef struct
{
uint8_t * volatile field;
} foo;
といった感じではなく
typedef struct
{
volatile uint8_t *field;
} foo;
関連
-
警告:符号付き整数式と符号なし整数式の比較 [-Wsign-compare]
-
[解決済み] なぜmemsetではなくbzeroを使用するのですか?
-
[解決済み] C言語で関数型プログラミングを行うためのツールにはどのようなものがありますか?
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
-
[解決済み] C++の'struct'と'typedef struct'の違い?
-
[解決済み] .NETにおけるstructとclassの違いは何ですか?
-
[解決済み] 構造体のsizeofは、なぜ各メンバーのsizeofの合計と等しくないのですか?
-
[解決済み] 揮発性 vs. 連動性 vs. ロック性
-
[解決済み] volatileキーワードは何に役立つのでしょうか?
-
[解決済み] FortranはC言語よりも重い計算を最適化しやすいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
libc++abi.dylib: NSException タイプの捕捉されない例外で終了するエラー
-
Solve Dev-c++ [エラー] 'for' ループの初期宣言は、C99 または C11 モードでのみ許可されます。
-
error: 'for' loop initial declaration is only allowed in C99 mode 原因と解決方法
-
initializer element is not constant "というエラーが表示されるのですが?
-
[解決済み] 配列のすべてのメンバーを同じ値で初期化するには?
-
[解決済み] mallocとcallocの違い?
-
[解決済み] char s[]とchar *sの違いは何ですか?
-
[解決済み] なぜsizeof(x++)はxをインクリメントしないのですか?
-
[解決済み] FortranはC言語よりも重い計算を最適化しやすいですか?
-
[解決済み] 構造体をvolatileにすると、その構造体のすべてのメンバがvolatileになりますか?