广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 6760 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   

头像
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: *
推文 x 鲜花 x
分享: 转寄此文章 Facebook Plurk Twitter ▼ 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
文章表情[C/C++] SCOPE的问题

访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容



献花 x0 回到顶端 [楼 主] | 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.019733 second(s),query:7 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言