引用 | 編輯
youchun
2005-10-14 20:31 |
1樓
▲ ▼ |
首先要先說明 scope 是要用來區分 visibility 和 lifespan
ANSI C 有四種 Block 複製程式 { const int T_SIZE =100; } 複製程式 /* external linkage */ <foo1.c> const int T_SIZE = 100; <foo2.c> extern const int T_SIZE; 複製程式 void foofunction(int t_size) { ... } 複製程式 /* 亦是 declaration */ void foofunction(int); (C++ Primer 3e 所提到) local 複製程式 /* 侷限於函式定義內的一個局部區域 * 每一個函式都表現各自的一個 local scope * 可說是 block scope 與 function scope 的綜合 */ int size = 100; void foo1(int size) {...} int foo2(int size) { // local scope: level #1 while(){ // local scope: level #2 ... } printf("test\n");; // local scope: level #1 } 複製程式 /* 定義在 class 內部區域 */ class Foo { public: int t_size; . . . } 複製程式 /* 超越於函式宣告, 函式定義或 class 定義 * 以外的一個局部區域 * 為了解決全域命名空間污染問題而生 */ // ----------- uniqueFoo.h ------------ namespace uniqueFoo { class foo1 { ... } void foo2(int &); int foo3(int size) { ... } const int foobar = 100; } // ---------- foo.c ---------- #include "uniqueFoo.h" void main() { printf("foo = %d\n", uniqueFoo::foobar); } 詳細資料請網上找或閱讀相關書籍 -- 有錯請不吝指正 x2 |
引用 | 編輯
righer
2005-10-15 05:46 |
2樓
▲ ▼ |
首先感謝youchun大大熱情指導
不知道有沒有大大能寫出一個程式 裡面包含 File Scope Function scope Local scope Class scope 並且加以註解哪一段屬於哪一種scope 因為以一個完整程式碼加註解我比較容易看的懂 而我現在已經對這4個scope有一點瞭解 不過還不是很清楚 希望藉由一個簡單又完整的程式 並寫出哪一段屬於哪一種scope 因為我目前想知道哪一段屬於哪一種scope 所以再度麻煩各位大大為小弟解惑 謝謝 x0 |
引用 | 編輯
youchun
2005-10-15 11:16 |
3樓
▲ |
我覺得就 scope 來看變數的 visibility & lifespan
比區分哪個定義的 scope 有意義, 觀念上能釐清即可 以下程式碼有點雜亂 如果你可以了解 _number 是屬於何種 scope 就 ok 複製程式 // -------------- test.h --------------------- const int _number = 1000; // File scope // -------------- test.c -------------------- // g++ compiles #include <stdio.h> #include "test.h" extern const int _number; // File scope class Foo { // beginning of class scope public: Foo(int _number) { this->_number = _number; } int getnumber() { return this->_number; } private: int _number; }; // end of class scope int fun(int _number) { // start of function scope & local scope return _number + 1; } // end of function scope & local scope int main(){ Foo * foo = new Foo(_number); // external _number in test.h printf("foo->_number = %d at local level 1 \n", foo->getnumber()); // _number in class Foo int _number = 0; // _number at local scope level 1 printf("_number = %d at level 1\n", _number); while(true) { // start of local scope level 2 int _number = 3; // _number at local scope level 2 _number = fun(_number); printf("_number = %d at level 2(while loop)\n", _number); for( int _number = 100; _number < 103; _number++) { printf("_number = %d at level 3(for loop)\n", _number); // local scope level 3 } if (_number == 4) break; } // end of local scope level 2 return 0; } foo->_number = 1000 at local level 1 _number = 0 at level 1 _number = 4 at level 2(while loop) _number = 100 at level 3(for loop) _number = 101 at level 3(for loop) _number = 102 at level 3(for loop) -- 不完善的地方請大家指正 x2 |