作用域為當前**塊,即{}中。在**塊外部不可見。
區域性靜態變數,即在**塊中宣告的靜態變數,作用域為當前**塊,超過該**塊則不可見:
static int a = 0;
void test()
2.類靜態成員變數,作用域為當前類,超出類範圍則不可見
static int a;
class test
;
3.全域性靜態變數,不在類中也不在**塊中。該變數作用範圍在當前檔案。
a.cpp 中定義static int a = 0; b.cpp中定義static int a=0;
編譯鏈結通過,因為a.cpp和b.cpp都不知道對方有a,故各自使用各自的。
全域性變數作用範圍為整個模組\工程,如果其他檔案中有定義同名變數,鏈結器會報符號重定義,如果確實想在整個模組中使用乙個變數。則需要在乙個cpp中定義,其他引用的地方需要extern修飾宣告使用該變數:
a.cpp定義int _a = 0; b.cpp中使用: extern int _a; _a = 1;
任何全域性變數,靜態\非靜態,都不應該被定義在.**件中,因為.**件會被其他檔案包含,如果是非靜態全域性變數,在鏈結時會直接報符號重定義,因為.h被cpp包含一次,就會多一次定義。 如果是靜態全域性變數,則比較隱晦,聯結器不會報錯,但是包含該.h的cpp都會有乙個該變數的定義,結果是各自使用各自的,除非清楚這樣的作用,否則絕不應該使用。建議永遠不要再.h中定義全域性變數,無論是否靜態。
特別:對於類中宣告的靜態變數,.h被多次包含後並不會報錯,這是因為,類中的靜態成員僅僅是聲名,真正的定義是在類的cpp中定義的,所以無論包含了多少次.h,變數的定義始終只有乙份。
函式符號的可見跟全域性變數相同,因此標頭檔案中也不要定義函式,會導致包含這個標頭檔案的其他cpp重定義。如果想在.h中定義函式,可以用inline修飾,內聯函式沒有這個限制。
說說c++的模組組織,.h用來存放型別宣告,包括類,函式,和const變數,.cpp中用來存放類定義,函式定義,和靜態\全域性變數的定義。
PL SQL變數作用範圍及可見性
在pl sql程式設計中,如果在變數的定義上沒有做到統一的話,可能會隱藏一些危險的錯誤,這樣的原因主要是變數的作用範圍所致。與其它高階語言類似,pl sql的變數作用範圍特點是 變數的作用範圍是在你所引用的程式單元 塊 子程式 包 內。即從宣告變數開始到該塊的結束。乙個變數 標識 只能在你所引用的塊...
ABAP ABAP變數的可見範圍
abap變數有三種可見範圍 區域性可見變數 在form和function中定義的變數,這類變數只在form和function可見,當有全域性變數與區域性變數同名,全域性變數將被區域性變數遮蔽。全域性可見變數 除去 定義宣告的變數以外的所有在程式中定義的變數為全域性變數,在程式範圍內可訪問。跨程式可見...
變數的作用範圍
1.類中所有變數的預設修飾符是private。2.區域性變數必須先初始化才能使用,全域性變數 類的成員變數 可以不初始化,預設值為0 1 static void main string args 212 else 1316 17console.readkey 18 1920 static int n...