Bootstrap

C++和C语言的交互总结

如何在C++文件里面调用C函数?

使用extern "C"{……}声明即可。extern "C"{……}有什么作用?

extern "C"是C++中的一种特殊声明,用于指示编译器按照C语言的编译方式来处理特定的代码段。它的主要作用是实现C++代码与C语言代码的混合编程。具体来说,extern "C"的作用包括以下几个方面:

●避免名称修饰(Name Mangling):由于C++支持函数重载,编译器在编译C++代码时会对函数名进行修饰,以包含参数类型信息,从而生成独特的函数符号名。而C语言不支持函数重载,因此不会对函数名进行这样的修饰。使用extern "C"可以告诉C++编译器不要对指定的函数或变量名进行C++特有的名称修饰,而是保持其原有的C语言风格的名称。

●促进C++与C的互操作性:通过extern "C",C++代码可以调用C语言编写的函数或使用C语言定义的全局变量,反之亦然。这有助于在项目中混合使用C和C++代码,特别是在需要利用已有的C语言库或与C语言开发者协作时。

●提高链接兼容性:在没有extern "C"的情况下,如果C++代码尝试调用C语言编写的函数,链接器可能无法找到对应的符号,因为两者的符号命名规则不同。使用extern "C"可以确保在链接阶段,C++代码能够正确地识别和链接到C语言编写的函数。

总的来说,extern "C"是C++中一种重要的机制,它允许C++代码以C语言的方式编译和链接特定的函数或变量,从而实现了C++与C语言之间的无缝集成和互操作性。

具体来说,你可以在extern "C"块中声明或定义C语言风格的函数,然后这些函数就可以在C++代码中被调用,就像它们是普通的C++函数一样。例如:

// C++ 文件
#include <iostream>

extern "C" {
    // 声明或定义C语言风格的函数
    void c_function();
}

int main() {
    c_function(); // 调用C语言风格的函数
    return 0;
}

在这个例子中,c_function是一个C语言风格的函数,它在extern "C"块中被声明。然后在main函数中,我们可以像调用普通的C++函数一样调用它。请注意,由于c_function是按照C语言的方式声明的,所以它的实现部分也应该使用C语言的语法和规则。

总之,extern "C"块内可以包含C语言函数的声明或定义,并且这些函数可以在C++代码中被调用。这是实现C和C++代码互操作性的一种重要机制。

另外,注意一个问题:

我们知道,在一个c文件里调用其他c文件里的函数时,如果不包含目标函数头文件,也可以使用extern关键字来声明一个外部函数,比如:

extern void fun(void);

如果是在extern "C"块内,则声明c函数时的extern可有可无。

;