标 题: [合集] 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是为防止名字冲突