close
英語翻譯韓語(全域變數)
及其履行機會
申明:
C 語言的變數有所謂的 storage class翻譯社 初學時對當中的差別並非很容易弄清楚, 後來華頓翻譯公司把各種前提稍作整頓, 於是有了下面的表格:
備註:
前提/狀態 | 外部變數
| 自定義位置 (不必需在檔案的最前面) 至檔案結束 | 函數內 (或 {} 區塊內) | 函數內 | |||
---|---|---|---|---|---|---|---|
生命期3 每次進入函數或區塊後立刻履行 |
無窮制 只履行一次, main() 履行前由 "可載入履行檔 ELF" (或二進位影象 binary image) 拷貝至准確之 .data 區段位址內 |
無窮制翻譯社 任何運算式都可. (區域變數) | 函數參數 | ||||
大分類 | 全域變數 | 區域變數 | |||||
Key Word | 無 | static | static | auto (可略) | 無 | ||
界說/宣佈1位置 | 函數外部 | 函數內 (或 {} 區塊內) | 函數本體 | ||||
變數名稱反複 | 編譯毛病. 專案中所有全域變數名稱需獨一 |
| |||||
在外部檔案 (.c/.h) 中利用(或參考) | 外部檔案中變數宣佈的前面加上 extern 即可 | 外部檔案中無法利用(或參考) | 在界說的區塊外即無法使用 | 函數區塊外即沒法利用 | |||
可視範圍2 呼喚前執行設定 | |||||||
預設使用之記憶體區段 | 無初值 | .bss6 | stack6 | register 或 stack6 | |||
有初值 | .data6 | stack6 | register 或 stack6 |
文章標籤
C
C 說話
變數
static
external
Keil C51
.text
.bss
.data
c variable scope
c varibale lifetime
const
volatile
- 定義會保留記憶體, 宣佈則不會. 對變數來講除 extern 是宣告以外翻譯社 其他的都是界說.
- 可視規模: 是指在程式的那一個段落可使用該變數. 主動變數 (利用 stack 堆疊區) 在分開定義他的 {} 區塊後就有可能被別人佔用, 所以可視規模同生命期. 外部變數一分開界說的檔案就不可視, 但可使用 extern 宣告來從頭獲得. (現實上, 幫我們完成這件事的是 linker). 但靜態變數則限制不可以被 extern 的宣佈獲得可視性. (compiler 的語法查抄阻撓了我們獲得其可視性)
- 生命期: 是指變數佔用記憶體的時間, 只有主動變數 (利用 stack 堆疊區) 可以重覆利用記憶體空間, 其他都是永久佔據 (embebbed system) 或載入執行時佔用.
- 指未使用 va_arg (變動個數參數)的環境. 若利用 va_arg翻譯社 需應用一些技巧檢查參數個數, 不然會産生利用錯誤的參數翻譯社 或引發程式當掉.
- 初值設定指的在界說變數時, 跟從在厥後的等號 (=) 及其後的運算式
- .text, .bss翻譯社 .data 是一般編譯器之預設記憶體區段名稱翻譯社 linker (或者是 loader) 會安排實際的記憶體位址給各個區段.
- .text 為唯讀區段, 放置程式及常數資料 (小型 embedded system 會將之安設於 ROM/Flash 中)
- .data 為可讀寫區段, 放置初值不為 0 的變數 (利用 ROM/Flash 時會先附在 .text 以後). 在 main() 開始執行前, 由 "可載入執行檔 ELF" (或二進位影像 binary image) 拷貝至正確之 .data 區段位址內, 是故外部變數或靜態變數的初始值只能用常數運算式
- .bss 為可讀寫區段, 放置初值為 0 的變數. 在 main() 起頭履行前翻譯社 .bss 區段會被清為 0
- stack 為堆疊區 (大陸用語: 棧) 通常爲呼叫函數時的功課區 (返回位址暫存翻譯社 傳遞參數, 區域變數和返回值之貯存區), heap 為聚積區 (大陸用語: 堆) 是呼喚 malloc() 時獲得記憶區塊的濫觞.
來自: http://magicjackting.pixnet.net/blog/post/71949519-c-%e8%aa%9e%e8%a8%80%3a%e9%97%9c%e6%96%bc%e8%ae%8有關各國語文翻譯公證的問題歡迎諮詢華頓翻譯公司02-77260932
文章標籤
全站熱搜