Tôi có một vấn đề với một số mã mức thấp Tôi viết thư này, tôi cần phải sử dụng đối tượng như biến động, nhưng nó không nhất thiết phải vì vậy mà tôi muốn các loại được khai báo là không ổn định (vì lý do tái sử dụng). Tuy nhiên, tôi có thể xác định con trỏ đến một biến thể đủ điều kiện của một cấu trúc như được nêu chi tiết trong phân đoạn sau.ngữ nghĩa dễ bay hơi trong C99
struct x {
int bar;
};
struct x foobar;
...
volatile struct x *foo = &foobar;
Bây giờ foo là một cách hiệu quả một con trỏ đến một đối tượng của loại:
volatile struct x {
volatile int x;
};
kể từ biến động áp dụng đối với tất cả các thành viên struct. Bây giờ câu hỏi của tôi là khi một đối tượng chứa một con trỏ tới một đối tượng khác, thì sự biến động được áp dụng như thế nào?
struct x {
struct y *bar;
};
sẽ một con trỏ đến một trường hợp biến động của x sau đó thì điều này như là:
volatile struct x {
struct y * volatile bar;
};
hay như:
volatile struct x {
volatile struct y * volatile bar;
};
Tôi đã đọc qua tiêu chuẩn C, và nó không rõ ràng về điều này, và tôi có thể dễ dàng diễn giải từ ngữ theo nhiều cách.
http://www.netrino.com/node/80 Dường như hỗ trợ ý tưởng đó. Tôi chưa bao giờ đọc trên volitile. Đồ tốt. – Kieveli
"dễ bay hơi không quá hữu ích": không biết về phần mềm PC, nhưng trong các hệ thống nhúng, chúng cần thiết để khai báo các thanh ghi phần cứng hoặc các biến có thể thay đổi trong các ngắt. –
Điểm rất tốt! Đã một vài năm kể từ dự án nhúng cuối cùng của tôi, nên tôi đã quên mất điều đó. Dù sao mà làm việc vì nó là cho tải và cửa hàng. Trên PC, thật dễ dàng để quên đi hầu hết các ngắt khi chúng bị lỗi hệ điều hành api. –