以下两个声明有什么区别?我认为它们是相当的,但第一个样本有效,第二个样本没有。我的意思是它编译并运行,但位图显示代码显示为空白。我还没有穿过它,但我错过了明显的东西? GUI_BITMAP是描述位图的简单结构。这是VC++ 2005,但我认为它也在VC++ 2008中失败。抓我的头就这一个...C++中的extern关键字问题
示例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和C++的混合体。我的原始问题仍然存在 - 样本1和样本2有什么区别 - 我认为它们应该生成完全相同的代码?如果事情是功能而不是结构 - 它们是相同的东西,对吧? – Jeff 2010-03-27 13:44:42
@杰夫,你的问题的快速答案是,不,这两个不一样,这就是为什么你看到问题。在第二种情况下,您只是修改'{}'中的语句以使用C的链接约定。在第一个例子中,你正在做* plus *表示变量是在其他地方声明的。 http://msdn.microsoft.com/en-us/library/0603949d(VS.80).aspx – 2010-03-27 17:31:45