extern“C”强制限制我的代码吗?

时间:2012-03-09 05:14:54

标签: c++

标准是否对extern "C"使用的功能限制有所说明?在questions of mine that makes no sense to anyone else中。看来当我有一个复杂的类gcc中断(运行时奇怪/错误),如果我调用非默认构造函数(任何带有我相信的参数)和msvc似乎打破,如果它不是POD(但我仍然可以使用我的构造函数,它运行良好)。

我怀疑发生了所有未定义的行为,因为C库正在调用我的C ++,它返回的类型与指针的大小完全相同,但是具有运算符重载和构造函数。我不知道为什么会这样,gcc肯定不会给我任何警告。

extern" C"强制限制我的代码?我所知道的是异常无法通过它们,这很好,因为我不会在这段代码中使用它们。还有其他限制吗?

-edit-相关:Reproducible: Why does passing this object in C break my code?

2 个答案:

答案 0 :(得分:5)

你不能拥有与'c'不兼容的extern'c' - 这意味着没有默认参数,也没有重载函数

答案 1 :(得分:3)

我相信this question的答案很好地概述了对外部“c”联系的要求。我相信你遇到的问题是最后一项:

  

从C ++到其他语言定义的对象以及从其他语言在C ++中定义的对象的链接是实现定义的和语言相关的。只有在两种语言实现的对象布局策略足够相似的情况下才能实现这种联系。

由于您的函数返回一个类,它将根据该类的定义进行实现定义。这解释了为什么它在一个编译器中工作而在另一个编译器中工作。

C++ faq也有一些相关部分。