C語言volatile與const同時使用應注意的問題
const最主要的特點就是隻讀,有常量、常量指針,如果不是特別小心的分析C語言語句的書寫格式,再加上指針的使用,就特別容易弄錯。volatile關鍵字是一個類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改,下面就有小編分享C語言volatile與const同時使用應注意的問題,歡迎大家學習!
const和volatile放在一起的意義在於:
(1)本程序段中不能對a作修改,任何修改都是非法的,或者至少是粗心,編譯器應該報錯,防止這種粗心;
(2)另一個程序段則完全有可能修改,因此編譯器最好不要做太激進的優化。
“const”含義是“請做爲常量使用”,而並非“放心吧,那肯定是個常量”。
“volatile”的含義是“請不要做沒譜的'優化,這個值可能變掉的”,而並非“你可以修改這個值”。
因此,它們本來就不是矛盾的。
const修飾的變量不允許這裏修改不代表不允許別處修改,比如:
複製代碼 代碼如下:
int i = 5;
const int* p = &i;
*p = 6; // 不可以;
i = 7; // 完全可以,而且那個“const”的“*p”也跟着變成了7。
對於非指針非引用的變量,const volatile同時修飾的意義確實不大。個人覺得。
需要明白“volatile”的含義並非是“non-const”。所以他們纔可以放在一起。
在C++語言中,const沒有反義詞,如果一個變量沒有const修飾,那它本身就是const的反義詞,而並非加上volatile纔是const的反義詞。
兩者同時修飾一個對象的典型情況,是用於驅動中訪問外部設備的只讀寄存器。
留一個問題:const volatile int i=10;這行代碼有沒有問題?如果沒有,那 i 到底是什麼 屬性?
回答一:沒有問題,例如只讀的狀態寄存器。它是volatile,因爲它可能被意想不到地改變;它是const,因爲程序不應該試圖去修改它。volatile和const並不矛盾,只是控制的範圍不一樣,一個在程序本身之外,另一個是程序本身。
回答二:沒問題,const和volatile這兩個類型限定符不矛盾。const表示(運行時)常量語義:被const修飾的對象在所在的作用域無法進行修改操作,編譯器對於試圖直接修改const對象的表達式會產生編譯錯誤。volatile表示“易變的”,即在運行期對象可能在當前程序上下文的控制流以外被修改(例如多線程中被其它線程修改;對象所在的存儲器可能被多個硬件設備隨機修改等情況):被volatile修飾的對象,編譯器不會對這個對象的操作進行優化。一個對象可以同時被const和volatile修飾,表明這個對象體現常量語義,但同時可能被當前對象所在程序上下文意外的情況修改。另外,LS錯誤,const可以修飾左值,修飾的對象本身也可以作爲左值(例如數組)。
相關文章
-
「雅思寫作」the Growth Cycle of A Volcanic Island
The diagram shows the growth cycle of a volcanic island.The diagram demonstrates the natural process in terms of how a volcanic island grows from beneath the sea, explodes, and then eventually sinks t -
The Limitation of The Violence Shot 暴力鏡頭的限制英語作文
Nowadays, when we watch the movie or the TV series, we may find violence shot everywhere, such as the movie about a cop fighting with a gangster, so many violence is being presented, the process of th -
人教PEP版國小五年級英語下冊Unit3Myschoolcalender.ALet’stalk
本部分學習的核心句型是:Whenistheparty?It’sinApril.教材通過Mike和張鵬對校歷上四、五月要舉行的活動的討論場景,介紹了孩子們在春天將有很多趣味性活動的情景,即四月的運動會個萬聖節聚會、五月的春遊,讓學生感知上述 -
Unit 5 It must belong to Caral section A英語評課稿
不久前我有幸聽取了名師吳老師的公開課。吳老師這節課的內容是九年級Unit 5 It must belong to Caral section A(1a-2c)部分。這是一節新授課,採用多媒體進行教學。本課圍繞“It must belong to Caral”這一話題展開話題 -
高一英語寫作範文:Is It the Only Way Out To Go To College
Is It the Only Way Out To Go To College ?We had a discussion about whether it is the only way out for senior students to go to college.Views vary from person to majority of us consider it very necessa -
Module 3 Unit 2 I love my pocket calculator說課稿
一、 說教材1、 教材分析這單元選自外研社出版的《新標準英語》第四冊第三模塊第二單元。新標準英語第四冊是英語學習難度逐漸增加的關鍵時期,儘管學生在二年級上學期學習了字母,但所學習的英語知識並不很多,本學期 -
Connect to Idle Instance問題的解決方法
解決Connect to Idle Instance問題 第一步查看Oracle_SID.[oracle@linuxserver ~]$ echo $ORACLE_SIDcjdl這裏的'SID要和初始化文件裏的一樣才行。[oracle@linuxserver ~]$ cd $ORACLE_HOME[oracle@linuxserver -
英語閱讀:Life is inevitable consequence of physics
篇一:國中英語教師個人工作總結本學期我擔任七年級(1)班的英語教學。由於剛剛調進**國中,對新環境、新教材的教學要求知之甚少,加上多年未教七年級,教學上遇到前所未有的挑戰。因此,本 人虛心請教同行、潛心研究教法、在實踐中 -
英語美文閱讀:Kerry: Anti-IS Coalition Could Contribute to B
U.S. Secretary of State John Kerry says inteational cooperation in the fight against Islamic State militants could contribute to broader Middle East peace. Kerry says the Obama administration is commi -
六年級英語Unit 1 Welcome back to school教學設計
(一)熱身/複習(Warm-up/Revision)Talk togetherIntroduce your friend in your group.學生在小組裏介紹自己的好朋友。在對話過程中學生運用句型:“This is my friend ….”“ Where are you from? I’m from … ” “Nice