#ifndef與#endif與Static

#ifndef與#endif

#ifndef A
#define A

...
...

#endif

在同一個文件中只能講同一個頭文件包含一次。

使用這種技術爲了將文件內容包含在#ifndef中

就是說如果編譯器第一次碰到A的定義,則會查看ifndef到endif之間的內容,並讀取A定義這一行

如果在同一個文件中遇到包含該文件的代碼,則直接跳到endif後面的一行上。

注意:這種方法不是防止編譯器將文件包含兩次,而是讓它忽略第一次包含之外的所有內容。

 

靜態持續變量(static)

C++爲靜態存儲持續變量提供了三種鏈接性:外部鏈接(可在其他文件訪問),內部鏈接(只能在當前文件訪問)與無鏈接(只能在當前函數或代碼塊中訪問)。

編譯器將分配固態內存塊來存儲所有的靜態變量,這些變量在整個程序執行期間一直存在。

分別介紹一下特點:

1.想創建鏈接性爲外部的靜態持續變量,必須在代碼塊的外面聲明它.(外部變量)

2.想創建鏈接性爲內部的靜態持續變量,必須在代碼塊的外面聲明它,並且用static限定符。(靜態全局)

3.想創建沒有鏈接性的靜態持續變量,必須在代碼塊內部聲明它,並使用static限定符。(靜態局部)

int A = 0;
static int B = 0;
int main()
{
    ...;
}
void fun1(int t)
{
    static int count = 0;
    int llama = 0;
}

例如這樣的代碼,A爲外部的靜態持續變量,B爲內部的,count爲無鏈接的

但是count與llama不同的是,count哪怕在fun1沒有執行的時候,也留在內存中。

 

c-v限定符:

const與volatile

它表明,內存被初始化後,程序便不能再對它進行修改

 

mutable:

它用來指出:即使結構(或類)變量爲const,其某個成員也可以被修改。

 

再談const:

在默認情況下全局變量的鏈接性爲外部的,但是const全局變量的鏈接性爲內部的。

內部鏈接性意味着,每個文件都有自己的一組常量,而不是所有文件共享一組常量。每個定義都是其所屬文件私有的。

 

我們可以用extern來覆蓋默認的內部鏈接性,編程外部的

extern const int A = 50;

這種情況下,必須在所有使用該常量的文件中使用extern關鍵字來聲明。

 

通常,編譯器使用三塊獨立的內存:一塊用於靜態變量(可能再細分),一塊用於自動變量,一塊用於動態存儲

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章