深度理解C語言中的關鍵字static

2022-09-24 17:21:12 字數 1172 閱讀 6818

目錄

.h: 標頭檔案,一般包含函式宣告,變數宣告,巨集定義,標頭檔案等內容(header)

.c : 原始檔,一般包含函式實現,變數定義等 (.c:c語言)

如果在乙個原始檔定義乙個函式,然後再另乙個原始檔呼叫,這樣的方式可行嗎?

答案是可行的,但是在生成解決方案的時候會警告:

但是如果把函式換成變數的話,則無法執行:

如果要使用這個變數,就必須加入宣告:

注意在宣告的時候不能賦值:

這個很好理解,因為宣告並沒有開闢記憶體空間。

為什麼要有標頭檔案?

從上面不難看www.cppcns.com出,當單純使用原始檔組織專案的時候是十分麻煩的,比如乙個檔案要使用另乙個檔案的變數就必須要宣告,當專案非常複雜的時候維護成本會非常高。

所以為了解決這個問題,我們把函式宣告,以及很多檔案都需要用到的變數宣告、巨集定義、標頭檔案包含等放到標頭檔案中,原始檔想要用的時候只需要包含標頭檔案即可。這樣即可減少專案的維護成本。

變數宣告必須要加extern,函式宣告可以不加

到此為止,我們就知道了:

全域性變數,是可以跨檔案被訪問的。全域性函式,是可以跨檔案被訪問的。

對於有一定規模的專案,一定是多檔案的,多個檔案之間一定會有資料的「互動」(比如在main.c中訪問test.c的函式),所以如果不能跨檔案訪問,檔案之間「互動」成本就非常高。

對於一些需要隱藏起來不想被其他檔案訪問的變數或者函式,就可以用static修飾。

static修飾全域性變數,代表該變數只能在本檔案內被訪問,不能在其他檔案直接訪問。

雖然其他檔案不能直接訪問,但是可以通過本檔案的函式訪問:

static修飾全域性函式也是一樣。

對於全域性變數和全域性函式,static修飾的是變數和函式的作用域。

static修飾區域性變數,修飾的是變數的生命週期,變數的生命週期變成全域性週期。(作用域不變)。

且該變數的初始化www.cppcns.com只會在定義的時候進行一次,後續將不再進行初始化,因為定義只能定義一次。

在這裡fun函式結束後,變數i並沒有被釋放,它的生命週期是全域性週期。

注意這裡i的作用域沒變,在函式外是不能訪問i的。

stat程式設計客棧ic修飾的區域性變數和全域性變數會被放在靜態區,靜態區在整個「程序」執行生命週期內都是有效的。而區域性變數則會被放到棧區,棧區的變數具有臨時性,因為棧區有入棧(開闢空間)和出棧(釋放空間)的過程。

c語言中const 關鍵字的理解

對於非指標變數的修飾,const可以放在型別的前面,也可以放在型別的後面,例如 int const myint 或者 const int myint 他們所表達的意思是一樣的,都是表示myint 是常量,不能再修改myint的值 對於指標變數的宣告,四種情況,以int為例 1.const int m...

理解C語言中的關鍵字extern

我確定這篇文章對c語言的初學者會有很大的幫助,因為這將使他們更好更熟練的使用c語言。所以就讓我先來說說extern關鍵字在變數和函式上的應用。最基本的extern關鍵字擴充套件了變數和函式的可見度。這可能就是它為什麼命名為extern的原因。幾乎所有人都知道宣告和定義變數 函式 的意義,但是為了這篇...

c語言中關鍵字

static 修飾區域性變數,改變變數的生命週期和儲存空間,但是不改變作用域,仍然是乙個區域性變數,作用域僅限於該 修飾全域性變數,改變變數的作用域只能在當前檔案訪問,不能在其他檔案訪問 修飾函式,改變函式的作用域,函式只能在本檔案中被呼叫,不能在其他檔案被呼叫。extern 可以修飾變數和函式,表...