如何將結構的特定成員聲明爲volatile?在C中,你如何聲明一個結構的成員是不穩定的?
16
A
回答
25
完全一樣非struct
字段:
#include <stdio.h>
int main (int c, char *v[]) {
struct _a {
int a1;
volatile int a2;
int a3;
} a;
a.a1 = 1;
a.a2 = 2;
a.a3 = 3;
return 0;
}
可以通過使用"volatile struct _a {...}"
標記整個struct
揮發性但上述方法是用於各個字段。
9
應該是相當直截了當根據this文章:
最後,如果你申請揮發到 結構或聯合的全部內容的結構/聯合的 是揮發性。如果 您不想要這種行爲,那麼您可以將 將volatile限定符應用於 結構/聯合的 個別成員。
1
只是關於C/C++ volatile關鍵字的警告。
除非你知道你在做什麼,你不應該使用它。
C/C++揮發性!=的Java/C#揮發性
震盪線程代碼不會幫助,除非你真的知道自己在做什麼,你需要使用的C++ 0x原子模板(或類似的東西)。
我唯一不得不使用volatile的是控制硬件寄存器。
0
如果由於服務某些中斷(即信號處理程序或其他(接近)原子變量)而聲明爲volatile的成員未發生更改,那麼您應該不使用volatile(因爲大多數編譯器會將其優化掉)足夠接近)。
否則,正如其他人所說..只是用那麼它檢查ASM轉儲,看看你的編譯器實際上與你:)
在某些情況下,即同意GCC的某些版本..它值得一試的轉儲。
相關問題
- 1. 無法在c中的結構中聲明結構成員
- 2. 聲明結構的一個類的成員陣列(C++ 98)
- 3. 看不到一個聲明爲空的結構的成員
- 4. 如何聲明一個結構,其中只有一些成員可以使用另一個結構中的值?
- 5. 如何設置一個結構的特定成員,在C#
- 6. 如何聲明一個不會生成警告的結構?
- 7. 不穩定的bash聲明
- 8. 如何在c中聲明結構?
- 9. C中的結構聲明
- 10. C中的結構聲明
- 11. 聲明模板類中的結構,未定義成員函數
- 12. 在C中聲明結構
- 13. 你可以在聲明另一個成員時使用sizeof一個成員嗎?
- 14. 在一個C結構中的一個TCHAR成員 - 如何動態分配成員和結構數組?
- 15. 聲明在C++中的成員函數
- 16. PHP如何聲明一個類成員?
- 17. C++結構定義 - 如何在構造函數中定義一個具有單個參數的成員結構
- 18. 如何聲明包含Queue成員的動態數組結構?
- 19. C,結構的第一個成員
- 20. C結構聲明
- 21. 我該如何聲明一個結構?
- 22. 如何在編譯時聲明一個函數是特定類的成員
- 23. ro如何聲明一個成員是指向函數的成員
- 24. 是否有效的C聲明一個結構並定義{}中包含的值?
- 25. 如何在C++中的類中聲明一個字符串成員
- 26. 如何聲明一個朋友是C++中另一個尚未定義的類的成員函數?
- 27. 如何訪問一個指向另一個結構中聲明的結構?
- 28. 在C#中聲明一個類或結構內的方法#
- 29. 聲明一個類/結構
- 30. 聲明一個結構棧
我認爲你已經說過比嚴格需要強一點。 volatile對線程代碼有幫助,特別是在單核心嵌入式平臺上。但是你必須知道如何使用它。在使用或不使用DMA的情況下引用硬件寄存器時,它也是有效的強制措施,特別是要查詢狀態的寄存器。還有必要了解您的緩存以及如何正確管理緩存,並瞭解如何在您的平臺上執行原子操作。 – RBerteig 2009-06-11 08:31:42