廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 6756 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
righer
數位造型
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x12
分享: 轉寄此文章 Facebook Plurk Twitter ▼ 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
文章表情[C/C++] SCOPE的問題
想請教各位大大scope的問題
File Scope
Function scope
Local sc ..

訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容



獻花 x0 回到頂端 [樓 主] From:台灣教育部 | Posted:2005-10-14 09:57 |
youchun
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x26
分享: 轉寄此文章 Facebook Plurk Twitter ▲ ▼ 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

首先要先說明 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);
}

詳細資料請網上找或閱讀相關書籍
--
有錯請不吝指正

此文章被評分,最近評分記錄
財富:50 (by codeboy) | 理由: 感謝您的詳細說明~^^


獻花 x2 回到頂端 [1 樓] From:台灣中華電信 | Posted:2005-10-14 20:31 |
righer
數位造型
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x12
分享: 轉寄此文章 Facebook Plurk Twitter ▲ ▼ 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

首先感謝youchun大大熱情指導
不知道有沒有大大能寫出一個程式 裡面包含
File Scope
Function scope
Local scope
Class scope
並且加以註解哪一段屬於哪一種scope

因為以一個完整程式碼加註解我比較容易看的懂
而我現在已經對這4個scope有一點瞭解
不過還不是很清楚 希望藉由一個簡單又完整的程式
並寫出哪一段屬於哪一種scope
因為我目前想知道哪一段屬於哪一種scope
所以再度麻煩各位大大為小弟解惑 謝謝


獻花 x0 回到頂端 [2 樓] From:台灣教育部 | Posted:2005-10-15 05:46 |
youchun
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x26
分享: 轉寄此文章 Facebook Plurk Twitter ▲ 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

我覺得就 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 回到頂端 [3 樓] From:台灣中華電信 | Posted:2005-10-15 11:16 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.018734 second(s),query:5 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言