我知道当我想将 C 代码链接为 C++ 中的 C 代码时,我应该使用 extern "C"
。但使用以下代码:
/* file.h */
some (void)
{
return 10;
}
extern "C"
{
#include "file.h"
}
#include <iostream>
int main (void)
{
std::cout << some() << std::endl;
}
我收到此编译时错误:
C4430: missing type specifier - int assumed. Note: C++ does not support defualt-int.
我该如何处理这个问题?
我在 MS-Windows10
上使用 MSVC2017
。
编辑:我知道大多数声明具有显式返回类型的函数,但我该使用什么USBPcap USBPcap 声明了类似的函数。我如何在我自己的 C++ 程序中使用它?
最佳答案
extern "C"
仅更改声明的链接。特别是,它禁用了某些 C++ 功能(例如重载)所需的 C++ 名称修饰。
extern "C"
不会将程序的封闭部分编译为 C。因此,声明仍必须是格式良好的 C++。 some (void)
不是 C++ 中格式良好的声明,这解释了错误。
How i can deal with this ?
显式声明返回类型。
USBPcap declare some function like that. How i can use it in my own C++ program ?
那么您就不能使用该 header 。您可以自己编写一个 C++ 兼容头文件。或者,您可以使用支持隐式 int 作为扩展的 C++ 编译器。
P。 S. 从 C99 开始,隐式 int 在 C 语言中也不是格式良好的。
关于c++ - 在带有 extern "C"的 C++ 中使用 C 代码时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58790133/