說我有這個功能
int foo(int * const bar){
while(!*bar){
printf("qwertyuiop\n");
}
}
我打算將 at 的值更改為bar0 以外的值以停止此回圈。改寫如下是否合適?
int foo(int volatile * const bar){
while(!*bar){
printf("qwertyuiop\n");
}
}
uj5u.com熱心網友回復:
volatile旨在用于記憶體映射設備暫存器之類的東西,由于所涉及的硬體的性質,指向的值可以“神奇地”改變“在編譯器的背后”。假設您沒有撰寫處理可能“自發”更改bar指向的值的特殊硬體的代碼,那么您不需要(也不應該)使用volatile關鍵字。簡單地省略const關鍵字就足以讓編譯器(以及任何可能呼叫該函式的程式員)知道指向的值可能會發生變化。
請注意,如果您打算*bar 從另一個執行緒設定,則volatile關鍵字不夠好;即使您將指標標記為 volatile,編譯器仍然不能保證正確處理。為了使該用例正常作業,您需要*bar使用互斥鎖同步所有讀取和寫入,或者使用 astd::atomic<int>而不是 plain int。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/448231.html
上一篇:從“longlongunsignedint”到“longlongunsignedint:40”的轉換將值從“0xFFFFFFFFFFFFFFFF”更改為“0xFFFFFFFFFF”[-Werror=o
下一篇:在C中創建沒有malloc的鏈表
