我正在學習ANSI C編程語言,它在介紹中說:C自動變量中是全局變量嗎?
「局部變量通常是」自動的「,或者在每次調用時重新創建。
我猜分配和取消分配變量與java的堆棧幀邏輯工作。全局變量也是自動的嗎?由於它們位於整個.c文件的範圍內,所以它們會比本地變量少得多地進入和退出堆棧幀。我不知道你從其他文件調用的變量範圍是如何工作的。
我正在學習ANSI C編程語言,它在介紹中說:C自動變量中是全局變量嗎?
「局部變量通常是」自動的「,或者在每次調用時重新創建。
我猜分配和取消分配變量與java的堆棧幀邏輯工作。全局變量也是自動的嗎?由於它們位於整個.c文件的範圍內,所以它們會比本地變量少得多地進入和退出堆棧幀。我不知道你從其他文件調用的變量範圍是如何工作的。
不,這些概念不會互相玩。術語全局變量是一種非正式的概念,指的是具有外部聯繫的變量。根據定義,自動變量沒有鏈接,因此變量是無意義的,既是自動的也是全局的。
值得一提的是,全局變量和本地變量之間的另一個區別是全局變量是由0初始化的默認情況下,如果我沒有錯,而本地人默認初始化,對於基本類型,這意味着未定義的值。 –
@ Peregring-lk:關於全局變量是對的。本地人的情況更復雜,因爲有多個存儲類說明符。例如,帶有'static'關鍵字的局部變量也是零初始化的。 OTOH,自動變量(隱含'auto'說明符的變量)沒有任何隱式初始化 - 它們是不確定的,直到明確賦值爲止。 –
全局變量有一個固定的地址,它們不是自動的。它們在程序開始時分配,並在整個執行過程中保持這種狀態。 –
否。文件範圍對象具有靜態存儲持續時間。 – EOF
否:在沒有'static'或'register'(或'extern')關鍵字的函數中定義的變量是'auto'變量。理論上他們可以用關鍵字'auto'作爲前綴。如果你實際添加了關鍵字(見證C++已經完全接受了它的完全不同的目的),那麼你應該被槍殺 - 如果你在生產C中遇到了關鍵字,你應該把編寫'auto'的人放在流下並使他們悔改自己的惡行。 –