外部"C"访问代码的函数
extern "C" function accessing code
假设我有以下C++代码:
int x;
some_class y;
extern "C" {
void foo () {
// do something with x
// do something with y
}
}
x
和/或y
是否需要用extern "C"
声明?
否。extern "C"
函数访问带有C++语言链接的函数和变量没有任何限制。
C++extern "C"
函数通常用于为具有C++语言链接的代码提供C接口,因此如果是这样的话,它将受到一些限制。
好吧,不需要使用extern "c"
来声明变量。事实上,即使是函数也不需要使用extern "C"
,因为您从具有extern "C"
的函数中调用它们
你可以自由地编写代码,比如:
void bla() {cout<<"blan";}
extern "C" void sh() {bla();}
函数"sh"将使用c++编译器进行编译,因此它可以自由调用bla。extern "C"
仅影响函数的名称。
C++方法/函数支持重载,这使它们的链接方式稍微复杂一些。extern"C"所做的实际上是说"不要让我重载并使用好的旧C方法",这使它与C代码兼容。
编辑:Charles Bailey指出,我显然对变量以相同的方式连接是错误的。换句话说,如果变量由外部C代码使用(它们可能是静态的,因为它们不是静态的),则应该将它们放在外部"C"中。如果您只在文件内部使用它们,或者只从外部C++代码中使用它们,那么您可以将它们保留在原地。
extern "C"
只对函数有用,对数据不有用。它定义了函数被修饰或损坏的方式。装饰也取决于所使用的调用约定。类不能从C中使用,将类作为参数的函数也不能使用,即使在extern "C"
块中也是如此。
在C和C++代码打算使用C库的情况下,extern "C"
是有意义的。
总之,在extern "C"
中拥有一个类是没有意义的,x
只是一个基本类型,拥有内部或外部并不重要。使用该功能的正常方式是将标头的所有内容都放在这样的块中。在标头中包含int
声明不是一个好主意!这将为每个翻译单元创建一个变量,并在链接时造成麻烦。。。不确定你打算用类似于你发布的代码做什么。
- 如何将 c++ get 函数代码转换为 opencv 算法中使用的 python
- 修改链表主函数代码,用户将在其中输入节点的索引和数据以及正确的消息
- 是否可以像这样编写c malloc函数代码
- 函数范围的静态变量如何导致与共享库中函数代码的未来使用不兼容
- 如何将C++ lambda 函数代码转换为 C#?
- 该构造函数代码如何将指针作为参数
- 调用C++具有复杂参数和复杂返回类型的函数 C 代码
- "_FCbuild"不能用作函数 - C/C++ 代码错误
- 复制赋值和复制构造函数(代码C++的差异)
- 反向链表的递归函数(代码段说明)
- 当满足条件时,是否可以在 GLSL 着色器中回调 C/C++ 函数/代码
- 在构造函数代码之前禁用默认类成员初始化
- 以下移动构造函数代码安全吗?
- C++构造函数代码..这叫什么
- 如何更改SWIG生成的CSHARP文件中的构造函数代码
- 找不到当前函数(代码::块)C++的边界
- 使用模板进行 C++ 函数代码泛化
- 编写此指针函数代码的长格式方法是什么
- C++某些构造函数代码之间的区别
- 错误C2668从站点对重载函数代码的调用不明确http://h264bitstream.sourceforge.net/