我知道当我想将 C 代码链接为 C++ 中的 C 代码时,我应该使用extern "C". 但是使用以下代码:
/* file.h */
some (void)
{
return 10;
}
Run Code Online (Sandbox Code Playgroud)
extern "C"
{
#include "file.h"
}
#include <iostream>
int main (void)
{
std::cout << some() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我收到此编译时错误:
C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 defualt-int。
我该如何处理?
我MSVC2017在MS-Windows10.
编辑:我知道大多数声明具有显式返回类型的函数,但是我使用USBPcap和 USBPcap 声明了一些类似的函数。我如何在我自己的 C++ 程序中使用它?
所有函数都应指定返回类型。您没有为some.
在旧版本的 C 中,如果省略函数的返回类型,则它默认为int. 但是 C++ 不支持。
您应该始终指定函数的返回类型:
int some(void)
{
return 10;
}
Run Code Online (Sandbox Code Playgroud)
extern "C"仅更改声明的链接。特别是,它禁用了某些 C++ 功能(例如重载)所需的 C++ 名称修饰。
extern "C"不会使程序的封闭部分编译为 C。因此,声明仍然必须是格式良好的 C++。some (void)不是 C++ 中格式良好的声明,这解释了该错误。
我该如何处理这个问题?
显式声明返回类型。
USBPcap 声明了一些类似的函数。我如何在我自己的 C++ 程序中使用它?
那么你就不能使用该标头。您可以自己编写一个 C++ 兼容头文件。或者,您可以使用支持隐式 int 作为扩展的 C++ 编译器。
PS 自 C99 以来,C 语言中的隐式 int 也不是格式良好的。