廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 5259 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為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.054653 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言