c++ - 在带有 extern "C"的 C++ 中使用 C 代码时出现问题

标签 c++ c extern-c

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

相关文章:

C++:打印数据,printf

c++ - C++ 中的未知属性 `extern_c` 警告

c++ - 结合 C++ 和 C - #ifdef __cplusplus 如何工作?

c++ - Qt问题: No QProgressBar animation with minimum and maximum steps set to 0

c++ - 使用 std::string 而不是 char* 不好吗?

C++ - 过度使用虚拟方法?

python - 有没有免费的 Python 到 C 的翻译器?

c - C 中的字节蚕食

c - #error 命令调用错误

c++ - clang++ 是否忽略了一些弃用警告的 extern "C"?