私が書いているいくつかの低レベルのコードに問題があります。オブジェクトを揮発性として使用する必要がありますが、(再利用性の理由から) 型を揮発性として宣言する必要があるとは限りません。ただし、次のセグメントで詳しく説明するように、構造体の修飾バリアントへのポインターを定義できます。
struct x {
int bar;
};
struct x foobar;
...
volatile struct x *foo = &foobar;
これで foo は事実上、次の型のオブジェクトへのポインターになります。
volatile struct x {
volatile int x;
};
volatile はすべての構造体メンバーに適用されるためです。ここで私の質問は、オブジェクトに別のオブジェクトへのポインターが含まれている場合、揮発性はどのように適用されるのですか?
struct x {
struct y *bar;
};
x の揮発性インスタンスへのポインターは、次のように扱います。
volatile struct x {
struct y * volatile bar;
};
またはとして:
volatile struct x {
volatile struct y * volatile bar;
};
私はC標準を読みましたが、これに関してはあまり明確ではなく、複数の方法で言葉遣いを簡単に解釈できます.