在带有 extern "C" 的 C++ 中使用 C 代码的问题

Gha*_*ani 4 c c++ extern-c

我知道当我想将 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。

我该如何处理?
MSVC2017MS-Windows10.

编辑:我知道大多数声明具有显式返回类型的函数,但是我使用USBPcap和 USBPcap 声明了一些类似的函数。我如何在我自己的 C++ 程序中使用它?

dbu*_*ush 5

所有函数都应指定返回类型。您没有为some.

在旧版本的 C 中,如果省略函数的返回类型,则它默认为int. 但是 C++ 不支持。

您应该始终指定函数的返回类型:

int some(void)
{
    return 10;
}
Run Code Online (Sandbox Code Playgroud)


eer*_*ika 5

extern "C"仅更改声明的链接。特别是,它禁用了某些 C++ 功能(例如重载)所需的 C++ 名称修饰。

extern "C"不会使程序的封闭部分编译为 C。因此,声明仍然必须是格式良好的 C++。some (void)不是 C++ 中格式良好的声明,这解释了该错误。

我该如何处理这个问题?

显式声明返回类型。

USBPcap 声明了一些类似的函数。我如何在我自己的 C++ 程序中使用它?

那么你就不能使用该标头。您可以自己编写一个 C++ 兼容头文件。或者,您可以使用支持隐式 int 作为扩展的 C++ 编译器。

PS 自 C99 以来,C 语言中的隐式 int 也不是格式良好的。