c語言中關鍵字volatile是什麼意思

時間 2021-12-29 00:55:29

1樓:小魚君吐槽

volatile的本意是一般有兩種說法。1.「暫態的 2.

「易變的。這兩種說法都有可行。乙個定義為volatile的變數是說這變數可能會被意想不到的改變,這樣,編譯器就不會去假設這個變數的值了。

優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值,而不是使用儲存在暫存器裡的備份。 www.okeycar.com

2樓:

簡單的理解就是這個變數可能會被外部函式改變,為了讓這個改變能有效執行,不被編譯器優化掉。

舉個例子吧,乙個函式用了乙個外部的變數,但這個變數在此函式中沒有改變,只是引用,這時候編譯器會去做優化,把它的值暫放在內部暫存器中,用的時候讀取的是暫存器的值,而不是去訪問它的位址取值,這樣的話,當這個變數在外部發生了變化的時候,比如中斷,或者另外的程序等等。但在這個函式裡面就不能起作用,因為被優化後使用的是暫存器的值,還是原來的值,導致錯誤發生。這種情況下,就要加上這個定義,就不會被優化了。

c語言中volatile關鍵字是什麼含義

3樓:匿名使用者

說明這個變數不允許編譯器進行自作聰明的優化。

4樓:匿名使用者

用volatile關鍵字定義變數,相當於告訴編譯器,這個變數的值會隨時發生變化,每次使用時都需要去記憶體裡重新讀取它的值,並不要隨意針對它作優化。

不使用volatile定義的變數,可能因為編譯器優化而出現一些問題,具體可以看給出的參考資料,裡面有乙個例子。

建議使用volatile變數的場所:

(1) 並行裝置的硬體暫存器

(2) 乙個中斷服務子程式中會訪問到的非自動變數(全域性變數)(3) 多執行緒應用中被幾個任務共享的變數

5樓:

volatile 影響編譯器編譯的結果,指出,volatile 變數是隨時可能發生變化的,與volatile變數有關的運算,不要進行編譯優化,以免出錯,(vc++ 在產生release版可執行碼時會進行編譯優化,加volatile關鍵字的變數有關的運算,將不進行編譯優化。)。

例如:volatile int i=10;

int j = i;

...int k = i;

volatile 告訴編譯器i是隨時可能發生變化的,每次使用它的時候必須從i的位址中讀取,因而編譯器生成的可執行碼會重新從i的位址讀取資料放在k中。

而優化做法是,由於編譯器發現兩次從i讀資料的**之間的**沒有對i進行過操作,它會自動把上次讀的資料放在k中。而不是重新從i裡面讀。這樣以來,如果i是乙個暫存器變數或者表示乙個埠資料就容易出錯,所以說volatile可以保證對特殊位址的穩定訪問,不會出錯。

c語言中的32個關鍵字分別是什麼意思

6樓:匿名使用者

1. 資料型別關鍵字(12個):

(1). char :宣告字元型變數或函式

(2). double :宣告雙精度變數或函式

(3). enum :宣告列舉型別

(4). float:宣告浮點型變數或函式

(5). int: 宣告整型變數或函式

(6). long :宣告長整型變數或函式

(7). short :宣告短整型變數或函式

(8). signed:宣告有符號型別變數或函式

(9). struct:宣告結構體變數或函式

(10). union:宣告聯合資料型別

(11). unsigned:宣告無符號型別變數或函式

(12). void :宣告函式無返回值或無引數,宣告無型別指標(基本上就這三個作用)

(2)控制語句關鍵字(12個):

a.迴圈語句

(1). for: 一種迴圈語句(可意會不可言傳)

(2). do : 迴圈語句的迴圈體

(3). while :迴圈語句的迴圈條件

(4). break:跳出當前迴圈

(5). continue:結束當前迴圈,開始下一輪迴圈

b.條件語句

(1).if: 條件語句

(2).else :條件語句否定分支(與 if 連用)

(3).goto:無條件跳轉語句

c.開關語句

(1).switch :用於開關語句

(2).case:開關語句分支

(3).default:開關語句中的「其他」分支

d. return :子程式返回語句(可以帶引數,也看不帶引數)

3. 儲存型別關鍵字(4個):

(1).auto :宣告自動變數 一般不使用

(2).extern:宣告變數是在其他檔案正宣告(也可以看做是引用變數)

(3).register:宣告積存器變數

(4). static :宣告靜態變數

4. 其它關鍵字(4個):

(1).const :宣告唯讀變數

(2).sizeof:計算資料型別長度

(3).typedef:用以給資料型別取別名(當然還有其他作用)

(4).volatile:說明變數在程式執行中可被隱含地改變

1、演算法

程式處理資料的流程被稱為演算法,演算法可以用言語描述,也可以用流程圖描述.

2、程式

不管用什麼語言來表達的對問題的描述,通常都稱為程式。

3、資料結構

資料結構是計算機儲存、組織資料的方式。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率的演算法。資料結構往往同高效的檢索演算法和索引技術有關。

4、資料型別

資料型別是指資料的內在表現形式。通俗地說,我們把資料加工計算中的特徵稱為資料型別。

5、字串

字串或串(string)是由零個或多個字元組成的有限序列。一般記為 s='a1a2•••an'(n>=0)。它是程式語言中表示文字的資料型別。

通常以串的整體作為操作物件,如:在串中查詢某個子串、求取乙個子串、在串的某個位置上插入乙個子串以及刪除乙個子串等。兩個字串相等的充要條件是:

長度相等,並且各個對應位置上的字元都相等。設p、q是兩個串,求q在p中首次出現的位置的運算叫做模式匹配。串的兩種最基本的儲存方式是順序儲存方式和鏈結儲存方式。

6、表示式

用運算子和括號將運算物件(常量、變數和函式等)連線起來的、符合c語言語法規則的式子,稱為表示式。

7、主調函式

在函式中,可以使用函式呼叫語句,來呼叫其他函式(稱為被呼叫函式),這時,就把控制轉移到被呼叫函式,而在被呼叫函式執行完畢或執行到語句return時,又把控制轉向原來的函式(稱為主調函式).

8、被調函式

9、變數

在程式執行過程中,其值不發生改變的量稱為常量,取值可變的量稱為變數。

c語言程式設計與應用開發

一.c語言的運算子和運算順序

二.c語言的四種程式結構

(1)順序結構 (2) 分支結構(3)迴圈結構(4)模組化程式結構

三.掌握一些簡單的演算法

1 資料型別關鍵字

a基本資料型別(5個)

void :宣告函式無返回值或無引數,宣告無型別指標,顯式丟棄運算結果

char :字元型型別資料,屬於整型資料的一種

int :整型資料,通常為編譯器指定的機器字長

float :單精度浮點型資料,屬於浮點資料的一種

double :雙精度浮點型資料,屬於浮點資料的一種

b 型別修飾關鍵字(4個)

short :修飾int,短整型資料,可省略被修飾的int。

long :修飾int,長整形資料,可省略被修飾的int。

signed :修飾整型資料,有符號資料型別

unsigned :修飾整型資料,無符號資料型別

c 複雜型別關鍵字(5個)

struct :結構體宣告

union :共用體宣告

enum :列舉宣告

typedef :宣告型別別名

sizeof :得到特定型別或特定型別變數的大小

d 儲存級別關鍵字(6個)

auto :指定為自動變數,由編譯器自動分配及釋放。通常在棧上分配

static :指定為靜態變數,分配在靜態變數區,修飾函式時,指定函式作用域為檔案內部

register :指定為暫存器變數,建議編譯器將變數儲存到暫存器中使用,也可以修飾函式形參,建議編譯器通過暫存器而不是堆疊傳遞引數

extern :指定對應變數為外部變數,即在另外的目標檔案中定義,可以認為是約定由另外檔案宣告的物件的乙個「引用」

const :與volatile合稱「cv特性」,指定變數不可被當前執行緒/程序改變(但有可能被系統或其他執行緒/程序改變)

volatile :與const合稱「cv特性」,指定變數的值有可能會被系統或其他程序/執行緒改變,強制編譯器每次從記憶體中取得該變數的值

2 流程控制關鍵字

a 跳轉結構(4個)

return :用在函式體中,返回特定值(或者是void值,即不返回值)

continue :結束當前迴圈,開始下一輪迴圈

break :跳出當前迴圈或switch結構

goto :無條件跳轉語句

b 分支結構(5個)

if :條件語句

else :條件語句否定分支(與if連用)

switch :開關語句(多重分支語句)

case :開關語句中的分支標記

default :開關語句中的「其他」分治,可選。

c 迴圈結構(3個)

for :for迴圈結構,for(1;2;3)4;的執行順序為1->2->4->3->2...迴圈,其中2為迴圈條件

do :do迴圈結構,do 1 while(2); 的執行順序是 1->2->1...迴圈,2為迴圈條件

while :while迴圈結構,while(1) 2; 的執行順序是1->2->1...迴圈,1為迴圈條件

以上迴圈語句,當迴圈條件表示式為真則繼續迴圈,為假則跳出迴圈。

c語言 中volatile關鍵字的用法

7樓:百物電腦配件店

volatile是個多執行緒變數,就是可能在很多函式中會修改他。特別是中斷函式中一定要用他。volatile的意思就是「不穩定的」可能突發地改變它,微控制器每次呼叫他的話,都要從他的位址取數。

預防微控制器不知道普通的變數改變了,還是用上一次的資料。

定義方法是 :

volatile char i; //定義乙個字元型的多執行緒變數"i"

volatile int j; //定義乙個整型的多執行緒變數"j"

記得給我打個辛苦分!哈哈

8樓:魔群領袖

我就用上面的例子吧

volatile int i = 10;

int k = i;

這段**如果沒有加上volatile,它的執行過程是 i = 10, 10 ->reg暫存器,k = reg值,就是說,k=i實際上是從暫存器裡讀出來的。這樣快捷高效,當然並不是每次都這樣,因為暫存器有限。如果在10->reg暫存器的時候,i儲存的記憶體變化了,也就是別的執行緒修改了i的值,k=i仍然會按照i=10來執行

加上volatile後,執行過程是 i = 10, k = *(int *)(&i); 它會從i的記憶體位址上去讀,當然值會非常準確,但是效率會比從暫存器中讀要慢很多。

c語言中volatile關鍵字是什麼含義

說明這個變數不允許編譯器進行自作聰明的優化。 用volatile關鍵字定義變數,相當於告訴編譯器,這個變數的值會隨時發生變化,每次使用時都需要去記憶體裡重新讀取它的值,並不要隨意針對它作優化。不使用volatile定義的變數,可能因為編譯器優化而出現一些問題,具體可以看給出的參考資料,裡面有乙個例子...

c語言關鍵字,C語言關鍵字有哪些?

c語言的關鍵字都是小寫的。庫函式名不屬於c語言關鍵字。標準c語言貌似有32個關鍵字。一類是基本資料型別的 void char int float short long double signed unsigned 一類是變數儲存類別的 static extern auto register vola...

求急急急!C語言中關鍵字有哪些,求解釋!還有類似int一類的符號,求解釋。謝謝

你可以在turbo c 上按 f1,f1 就會出來所以的解釋,但是英文解釋 一般用於模板,int是型別說明 求解奇怪符號文字語言一類的 50 一一一一一 目測他的腿已經斷成這樣了。乙個c語言題目,求解,求解釋 你這個程式有問題呀 y變數根本沒有定義while y 表示每迴圈一次 y的值就減一,一直到...

簡述c語言中識別符號和關鍵字的概念與區別

識別符號是在程式中使用的變數名 函式名 標號等統稱為識別符號。除庫函式的函式名由系統定義外,其餘都由使用者自定義。c 規定,識別符號只能是字母 a z,a z 數字 0 9 下劃線 組成的字串,並且其第乙個字元必須是字母或下劃線。在使用識別符號時還必須注意以下幾點 1 標準c不限制識別符號的長度,但...

c語言的關鍵字都有哪些,什麼作用

c語言中的關鍵字是c語言開發者在開發時定義有特殊 意義的字元,編譯器通過這些關鍵字編譯器才能對你的 進行解釋 額,關鍵字有各種作用呀,不同型別的作用不同 用於型別定義的,如int float double等 用於控制程式執行的,如if,for while等 c語言中有哪些關鍵字,功能是什麼?c語言關...