1. 程式人生 > 其它 >c++中#define,static,const

c++中#define,static,const

#define和那兩個都不一樣,它屬於巨集,是前處理器的一部分。預處理是在編譯之前的一道,簡單地進行字串替換。它不按照語言的語法,而是直觀自己的語法。你#define裡面寫的東西會被簡單粗暴地塞進去

1、static全域性變數 與#define普通全域性變數 有什麼區別?

全域性變數(外部變數)的說明之前再冠以 static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。

這兩者的區別在於:
(1)普通全域性變數的作用域是整個源程式,當一個源程式由多個原始檔組成時,普通全域性變數在各個原始檔中都是有效的。
(2)而靜態全域性變數則限制了其作用域,只在定義該變數的原始檔內有效,在同一源程式的其它原始檔中不能使用它。
由於靜態全域性變數的作用域侷限於一個原始檔內,只能為該原始檔內的函式公用,因此可以避免在其它原始檔中引起錯誤。

綜上所述,static全域性變數只初始化一次,防止在其他檔案單元中被引用。

2、static區域性變數 與普通區域性變數 有什麼區別?

static區域性變數只被初始化一次,下一次依據上一次結果值

3、static函式 與普通函式 有什麼區別?

static函式與普通函式作用域不同,僅在本檔案。只在當前原始檔中使用的函式應該說明為內部函式(static),內部函式應該在當前原始檔中說明和定義。對於可在當前原始檔以外使用的函式,應該在一個頭檔案中說明,要使用這些函式的原始檔要包含這個標頭檔案。

綜上所述,static函式在記憶體中只有一份,普通函式在每個被呼叫中維持一份拷貝

4、const與#define相比,有何優點?

const 作用:定義常量、修飾函式引數、修飾函式返回值三個作用。被const 修飾的東西都受到強制保護,可以預防意外的變動,能提高程式的健壯性。

const優點:
(1) const常量有資料型別,而巨集常量沒有資料型別,編譯器可以對const常量進行型別安全檢查,而巨集常量只進行字元替換,沒有型別安全檢查,並且在字元替換中可能會產生意料不到的錯誤。

原文連結:https://blog.csdn.net/Hongwei_1990/article/details/106203777