SCOPE的問題

Home Home
引用 | 編輯 righer
2005-10-14 09:57
樓主
推文 x0
想請教各位大大scope的問題
File Scope
Function scope
Local sc ..

訪客只能看到部份內容,免費 加入會員



獻花 x0
引用 | 編輯 youchun
2005-10-14 20:31
1樓
  
首先要先說明 scope 是要用來區分 visibility 和 lifespan
ANSI C 有四種
  Block
複製程式
{
    const int T_SIZE =100;
}
  File
複製程式
/* external linkage */
<foo1.c>
const int T_SIZE = 100;
<foo2.c>
extern const int T_SIZE;
  Function
複製程式
void foofunction(int t_size) { ... }
  Function prototype
複製程式
/* 亦是 declaration */
void foofunction(int);
C++ 除了已上還支援
(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 內部區域 */
class Foo {
public:
    int t_size;
    .
    .
    .
}
  namespace
複製程式
/* 超越於函式宣告, 函式定義或 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