以下两个声明有什么区别?我认为它们是等效的,但是第一个示例有效,而第二个示例无效。我的意思是它可以编译并运行,但位图显示代码显示为空白。我还没有完成它,但我错过了一些明显的东西吗?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++ 有一些我不明白的微妙之处。如果外部区域中的东西是函数,那么两个样本将是相同的,对吧?