Có đủ để khai báo một thể hiện của biến cấu trúc như biến động (nếu trường của nó được truy nhập trong mã lại), hoặc phải khai báo các trường cụ thể của cấu trúc là dễ bay hơi?Ngữ nghĩa cấu trúc dễ bay hơi
phrased cách khác nhau, sự khác biệt về ngữ nghĩa (nếu có) giữa là gì:
typdef struct {
uint8_t bar;
} foo_t;
volatile foo_t foo_inst;
và
typedef struct{
volatile uint8_t bar;
} foo_t;
foo_t foo_inst;
tôi nhận ra rằng khai báo một biến con trỏ gõ như dễ bay hơi (ví dụ dễ bay hơi uint8_t * foo) chỉ thông báo cho trình biên dịch rằng địa chỉ được trỏ tới bởi foo có thể thay đổi, trong khi không đưa ra tuyên bố nào về các giá trị được trỏ tới bởi foo. Nó không rõ ràng với tôi cho dù một tương tự giữ cho các biến cấu trúc gõ.
Nếu trường là trường 'uint8_t [10]', khi bạn đánh dấu cấu trúc là dễ bay hơi là dữ liệu cơ bản được đánh dấu là dễ bay hơi hoặc "effec tive "con trỏ đến trường được đánh dấu dễ bay hơi? –
Dữ liệu cơ bản là dễ bay hơi. Một điều cần suy nghĩ là con trỏ 'hiệu quả' không thể sửa đổi được (nó luôn là địa chỉ của phần tử đầu tiên) nên dễ bay hơi sẽ không có ý nghĩa gì liên quan đến nó. –