Cách khai báo một con trỏ để hoạt động trong C, để con trỏ tự biến động.C: Khai báo con trỏ biến động thành hàm
static void volatile (* f_pointer)(void*);
static void (volatile * f_pointer)(void*);
static void (* volatile f_pointer)(void*);
Tại sao tôi hỏi điều này? Tôi đọc tại http://wiki.answers.com/Q/Volatile_example_code_sample_coding_of_volatile_pointer về con trỏ dễ bay hơi.
Có đôi khi vấn đề với con trỏ dễ bay hơi và con trỏ đến biến động:
Bây giờ, nó chỉ ra rằng các con trỏ tới biến không ổn định là rất phổ biến. Cả hai tờ khai tuyên bố foo là một con trỏ đến một số nguyên không ổn định:
volatile int * foo;
int volatile * foo;
con trỏ dễ bay hơi để biến non-volatile là rất hiếm (Tôi nghĩ rằng tôi đã sử dụng chúng một lần), nhưng tốt hơn tôi nên đi trước và cung cấp cho bạn cú pháp:
int * volatile foo;
Vì vậy, tôi muốn có được một con trỏ biến động thực hiện chức năng không phải là một con trỏ đến "dễ bay hơi" chức năng.
Cảm ơn
Tại sao bạn muốn một con trỏ dễ bay hơi đến một hàm? Ai sẽ thay đổi con trỏ này? Bạn có biết 'volatile' _really_ có nghĩa là gì không? –
@ James McNellis, Vâng, tôi muốn. Con trỏ này được thay đổi bởi chuỗi 0 và được sử dụng bởi các chủ đề 1..7 để bắt đầu một hàm.Có một rào cản giữa, nhưng tôi muốn trình biên dịch chuyển con trỏ này sang bộ nhớ trong chuỗi 0 trước khi vào một rào cản. Ngoài ra tôi muốn các chủ đề 1..7 để đọc lại con trỏ này (có một vòng lặp '{barrier, pointer read, calling function}'). Tôi sử dụng một hệ thống với rất nhiều thanh ghi có sẵn, do đó trình biên dịch có thể lưu vào bộ nhớ cache rất nhiều biến. Tôi có đúng không? – osgx
Nếu rào chắn được viết chính xác, trình biên dịch không nên lưu vào bộ nhớ đệm các giá trị trên nó - 'biến động' không cần thiết. – caf