【发布时间】:2010-03-27 00:42:20
【问题描述】:
以下两个声明有什么区别?我认为它们是等效的,但是第一个示例有效,而第二个示例无效。我的意思是它编译并运行,但位图显示代码显示为空白。我还没有通过它,但我错过了一些明显的东西吗? GUI_BITMAP 是描述位图的简单结构。这适用于 VC++ 2005,但我认为它在 VC++ 2008 中也失败了。在这个问题上摸不着头脑......
样本 1:
extern "C" const GUI_BITMAP bmkeyA_cap_active;
extern "C" const GUI_BITMAP bmkeyA_cap_inactive;
示例 2:
extern "C"
{
const GUI_BITMAP bmkeyA_cap_active;
const GUI_BITMAP bmkeyA_cap_inactive;
};
编辑: 更多探索表明第二个示例是创建结构,而第一个示例是指外部结构。第二个示例应该无法链接,因为在全局范围内有两个同名的变量。但它没有,它向放弃的显示代码发送一个零填充结构。嗯.....
编辑 2: 通过另一个编译器 (IAR) 运行相同的代码实际上无法在示例 2 上编译,并出现关于缺少默认构造函数的错误。所以我猜想“extern”关键字、结构和 C++ 有一些我不明白的微妙之处。如果外部区域的东西是函数,那么两个样本应该是一样的吧?
【问题讨论】:
标签: c++ visual-c++ keyword extern