目前位置: VCer资源中心 >>> VCer知道

[本帖已阅读1165次 分值0 回复0次] 张贴资源 发回信箱 控制面板

static修饰的全局变量

提供者:lucy 张贴时间:2007-03-09 15:33:02.0 出处:newsmth.net 作者:不祥

static修饰的全局变量(2007-03-09 15:33:02.0)


lucy


 
级别: VCer小兵
头衔: VCer会员

经验: 10
作品: 92
分会: 华北分会
注册: 2007-03-09 10:35:00.0
登录: 2007-05-31 14:40:23.0

标  题: [合集] static修饰的全局变量

发信站: BBS 水木清华站 (Mon Jan 24 00:31:21 2005), 站内

☆─────────────────────────────────────☆ 

  xuzg03 (121121) 于  (Thu Jan 20 11:51:41 2005)  提到:

希望高手指点下,问题如下:

#define _IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew) \

    static char _lpsz##class_name[] = #class_name; \

    CRuntimeClass class_name::class##class_name = { \

    _lpsz##class_name, sizeof(class_name), wSchema, pfnNew, \                 

    RUNTIME_CLASS(base_class_name), NULL }; \

    static AFX_CLASSINIT _init_##class_name(&class_name::class##class_name); \

    CRuntimeClass* class_name::GetRuntimeClass() const \

{return &class_name::class##class_name;}

这一段是从经典的<<深入浅出MFC>>中取出来的,主要是用来进行(RTTI)的,现在弱弱的

问下,为什么“AFX_CLASSINIT”要规定为静态?它已经是全局了,它必然具有静态的特性

啊!

☆─────────────────────────────────────☆ 

  flimsy (弘二法师) 于  (Thu Jan 20 11:55:17 2005)  提到:

给全局的变量加上static修饰,改变的是它的linkage,默认是external,static就是

internal

当在局部变量上用static时,不再改变linkage,而是改变存储方式

【 在 xuzg03 (121121) 的大作中提到: 】                                         

: 希望高手指点下,问题如下:                                                   

: #define _IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew)

\                                                                             

:    static char _lpsz##class_name[] = #class_name; \

: ...................                                                         

                                                                               

                                                                               

☆─────────────────────────────────────☆ 

  xuzg03 (121121) 于  (Thu Jan 20 12:58:02 2005)  提到:

那为什么要把它改为internal?

【 在 flimsy (弘二法师) 的大作中提到: 】                                       

: 给全局的变量加上static修饰,改变的是它的linkage,默认是external,static就是 

internal                                                                       

: 当在局部变量上用static时,不再改变linkage,而是改变存储方式                 

                                                                               

                                                                               

                                                                               

☆─────────────────────────────────────☆ 

  flimsy (弘二法师) 于  (Thu Jan 20 13:15:27 2005)  提到:

那段宏我也没看过

linkage改成internal是为防止名字冲突

【 在 xuzg03 (121121) 的大作中提到: 】                                         

: 那为什么要把它改为internal?                                                 

                                                                               

                                                                               

                                                                               

☆─────────────────────────────────────☆ 

  ilovecpp (cpp) 于  (Thu Jan 20 13:28:22 2005)  提到:

应该问问什么它不是internal,别的单元为什么需要看见它。

【 在 xuzg03 (121121) 的大作中提到: 】                                         

: 那为什么要把它改为internal?                                                 

                                                                               

                                                                               

☆─────────────────────────────────────☆ 

  xuzg03 (121121) 于  (Thu Jan 20 14:07:05 2005)  提到:

你的意思是为了隐藏这个文件中的全局变量,其他文件如果不能引用,那可以看作是一种封

装。

【 在 ilovecpp (cpp) 的大作中提到: 】                                         

: 应该问问什么它不是internal,别的单元为什么需要看见它。                       

                                                                               

                                                                               

                                                                               

                                                                               

☆─────────────────────────────────────☆ 

  xuzg03 (121121) 于  (Thu Jan 20 14:09:13 2005)  提到:

在封装的意义上来说,我很同意flimsy的说法

【 在 flimsy (弘二法师) 的大作中提到: 】                                       

: 那段宏我也没看过                                                             

: linkage改成internal是为防止名字冲突                                         

                                                                               

                                                                               

                                                                               

☆─────────────────────────────────────☆ 

  xuzg03 (121121) 于  (Thu Jan 20 14:14:16 2005)  提到:

这个解释很令人信服,不知道其他人有没有别的看法

【 在 flimsy (弘二法师) 的大作中提到: 】                                       

: 那段宏我也没看过                                                             

: linkage改成internal是为防止名字冲突           

注:转载文章需注明来源:VCer.net 文章地址:http://vcer.net/1173425582718.html

  如果你觉得VCer.net不错,而且你愿意为VCer.net捐赠一元钱,那么点击后面的捐赠按钮吧:) vcer.net捐赠

[回复该贴] [加入个人书签]
[投票结果]

A: 评分 10 0% (0 票)
B: 评分 5 0% (0 票)
C: 评分 0 0% (0 票)
D: 评分 -5 0% (0 票)
E: 评分 -10 0% (0 票)