#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關鍵字來聲明。
通常,編譯器使用三塊獨立的內存:一塊用於靜態變量(可能再細分),一塊用於自動變量,一塊用於動態存儲