在C++中调用C函数

Calling C functions within C++

本文关键字:函数 调用 C++      更新时间:2023-10-16

我有一个中等长度的C文件,里面有一堆函数(不是在头文件下,只是一堆函数),我希望在我正在开发的C++项目下收集和使用这些函数。

现在我已经阅读了extern函数,但我只看到它在.h文件下的小型C函数上工作。

但我希望在不干扰C文件本身的情况下包含这些函数,因为我并不真正理解它们——我只需要"隐藏"的函数。这个问题有简单易行的解决办法吗?

是的,您只需要在C++代码中看到一些extern "C"声明:

extern "C" {
    int my_C_function_1(void);
    int my_C_function_2(void);
}

这可以放在一个合适的头中,或者如果它只在一个特定的.cpp文件中使用,那么你可以把它放在那里。

请注意,如果您的C函数已经在C头中声明,那么您可以在.cpp文件中声明:

extern "C" {
#include "my_C_header.h"
}

您需要制作一个C++头文件myheader.hh。它从开始

 #ifndef MYHEADER_INCLUDED
 #define MYHEADER_INCLUDED
 extern "C" {

然后你声明所有的公共C函数、类型、宏等等…最后你用结束它

 }; // end extern C
 #endif MYHEADER_INCLUDED

在C++程序中,添加#include "myheader.hh"

或者(而不是使用myheader.hh),您可以在C++文件中添加(在其他include之后,但在C++代码之前)类似的内容

extern "C") {
#include "your-C-code.c"
};

(但它可能不起作用)。

您需要声明函数,通常在头文件中,以便从C++调用它们。如果您使用C编译器编译这些函数,那么您确实需要用extern "C"包围声明;例如

extern "C" {
int foo(int, int);
}

如果您有源代码,那么您也可以将其修改为包含头文件(sans-extern "C"),并使用C++编译器编译函数。