register關鍵字在c語言和c++中的差異
隨着編譯程序設計技術的進步,在決定哪些變量應該被存到寄存器中時,現在的C編譯環境能比程序員做出更好的決定。實際上,許多編譯程序都會忽略register修飾符,因為儘管它完全合法,但它僅僅是暗示而不是命令。以下是本站小編搜索整理的關於register關鍵字在c語言和c++中的差異,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!
在c++中:
(1)register 關鍵字無法在全局中定義變量,否則會被提示為不正確的存儲類。
(2)register 關鍵字在局部作用域中聲明時,可以用 & 操作符取地址,一旦使用了取地址操作符,被定義的變量會強制存放在內存中。
在c中:
(1)register 關鍵字可以在全局中定義變量,當對其變量使用 & 操作符時,只是警告“有壞的存儲類”。
(2)register 關鍵字可以在局部作用域中聲明,但這樣就無法對其使用 & 操作符。否則編譯不通過。
建議不要用register關鍵字定義全局變量,因為全局變量的生命週期是從執行程序開始,一直到程序結束才會終止,而register變量可能會存放在cpu的寄存器中,如果在程序的整個生命週期內都佔用着寄存器的話,這是個相當不好的舉措。
以下是從網上摘自別人的:
C和C++處理register關鍵字的一處差異
C++並不是完全兼容C語言的,上次提到的sizeof('a')等於幾的問題就是一例。今天我在編碼時又無意中發現了一處不同:
用register關鍵字修飾的變量,在c語言中是不可以用&操作符取地址的,這是我已有的經驗。因為編譯器如果接受了程序員的建議把變量存入寄存器,它是不存在虛擬地址的。但在C++中,用register修飾的變量可以用&操作符取地址,這是我在一段代碼中發現的`。如果程序中顯式取了register變量的地址,編譯器一定會將這個變量定義在內存中,而不會定義為寄存器變量。
我在C99(ISO/IEC 9899:1999)和ISO C++(ISO/IEC 14882:2003)標準中得到了確認,C和C++標準對register遇到&的處理確實有不同的明確定義。但為什麼要這樣定義?我只能從標準的字裏行間猜測。K&R C1中如何描述register我尚未查證,K&R C2(ANSI C)中説明了“register variables are to be placed in machine registers ... but compilers are free to ignore the advice ”。但在C99和ISO C++中,措辭分別變成:“suggests that access to the object be as fast as possible”、“a hint to the implementation that the object so declared will be heavily used”,不再特別提及“machine registers”。可見歷史上register關鍵字在強調儘可能地把變量保存到寄存器,而現在的register關鍵字不再強調具體手段,只是建議編譯器通過各種可行的方式優化該變量的訪問(不過很多編譯器會忽略這一關鍵字,而採用自身的優化策略)。C99可能是為了保持對K&R C的兼容而不允許取地址操作;而C++也許是因為沒有歷史包袱才放寬了這個限制吧。猜測而已,希望知道內幕的朋友告訴我更精確的答案。
-
2017年3月計算機二級C語言考試摸底測試題
以下是yjbys考試網小編整理的2017年3月計算機二級C語言考試摸底測試題,希望對大家有所幫助,祝大家計算機二級考試順利通過。一、選擇題(每小題1分。)(1)程序流程圖中帶有箭頭的線段表示的是()。A.圖元關係B.數據流C.控制流D.調用關係(2)結構化程序設計的基本原則...
-
C語言if else語句彙總
對於很多情況,順序結構的代碼是遠遠不夠的,大家都接觸過C語言吧,下面是小編為大家整理的C語言ifelse語句,希望對大家有所幫助。C語言ifelse語句在C語言中,使用if和else關鍵字對條件進行判斷。請先看下面的代碼:#includeintmain(){intage;printf("請輸入你的年齡:");sc...
-
C語言精選面試題詳解
C語言是IT編程中最基礎的語言,在面試中,基本可以忽略又或者格外重要。下面是小編為大家整理的C語言精選面試題詳解,歡迎參考~分析這些面試題,本身包含很強的趣味性;而作為一名研發人員,通過對這些面試題的深入剖析則可進一步增強自身的內功。試題1:以下是引用片段:voi...
-
2017年計算機二級考試C語言備考題及答案
計算機二級對於很多考生來説還是比較有難度的,那麼怎樣順利通過二級考試呢?這就需要大家平時多練習和找方法了。以下是本站小編整理的2017年計算機二級考試C語言備考題及答案,希望對大家有幫助!1.(A)是構成C語言程序的基本單位。A、函數B、過程C、子程序D、子例...
相關文章
- C語言關鍵字RESTRICT介紹
- C++中const-cast與reinterpret-cast運算符的用法
- The Risks of Plastic Surgery高中英語作文及翻譯
- C語言關鍵字:auto、static、register、const
- Young Actors Are Criticized大學英語作文
- C語言中的static和extern關鍵字的作用
- Choice of large enterprises or small英語四級作文
- C語言register關鍵字的使用
- Crack Researchers Create Gutsier Glass英語作文
- Protecting water resources英語作文