问题标签 [extern-c]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
109340 浏览

c++ - 从 C++ 代码调用 C 函数

我有一个想从 C++ 调用的 C 函数。我不能使用“ extern "C" void foo()”这种方法,因为 C 函数无法使用 g++ 编译。但它使用 gcc 编译得很好。任何想法如何从 C++ 调用函数?

0 投票
2 回答
896 浏览

c++ - 未解决的外部和外部“C”?

尽管我对 C++ 很陌生,但我并不完全理解这种链接和东西。我认为这是关于extern "C"链接。

我从中得到的问题是我需要解决extern "C"我认为的代码:

可悲的是,我不知道该怎么做,而且由于这个错误在 C++ 世界中非常普遍,因此找到答案并不容易,因为它们可能会有所不同。

希望解决这个问题很容易,因为我想我必须将它或其他东西定义为它的外部代码。

0 投票
3 回答
199 浏览

c++ - 如何布局混合 C 和 C++ 的函数原型

我有一个要包含在 .c 和 .cpp 文件中的标头。

所以我知道名称修饰和外部“C”所以......

但是当我将它包含在 .c 文件中时,它看不到该功能,因为#ifdef __cplusplus

所以我最终制作了 2 个副本:

有没有更好的方法来做到这一点......我想过制作另一个名为prototypes.h的标题并将其包含在这两个地方......但是我缺少一些简单的东西吗?

0 投票
1 回答
583 浏览

c++ - C++ 对非 C 语言的外部“C”功能

众所周知,extern "C"向 C++ 函数声明会使它的名字具有 C 链接,从而使 C 代码能够链接。

我的问题是 - 我们可以让 C++ 函数名称链接到其他编程语言吗,比如extern "Lisp"or extern "FORTRAN"

如果不是,为什么?限制的背后的内部结构是"C"什么?

有哪些替代方案?

0 投票
3 回答
94 浏览

c++ - 是否有可能无法将 C 方法包含在 C++ 项目中?

extern "C"我知道我可以使用这个东西在 C++ 项目中包含 C 方法。但是现在让我们假设我正在考虑创建一个 C++ 项目,该项目将使用大量 C 方法,这些方法来自我制作的库以及其他人/公司制作的库,其开发细节和编译规范我是根本不知道。

是否有可能某些具有未知编译和配置细节的 C 库方法无法包含在我的 C++ 项目中extern "C"?还是所有 C 方法都必须 100% 兼容 C++ 代码extern "C"

0 投票
1 回答
461 浏览

c++ - 在函数定义中指定参数默认值会导致错误 C2143:语法错误:在 '=' 之前缺少 ')'

我有以下声明:

其中最后一个 agrument 具有默认值group_name = 0

当我编译 C++ DLL (/TP) 时它工作正常并且在编译宏 DLL 时如下:

但是当我尝试编译与此 DLL 链接的 C 应用程序 (/TC) 时,它会给出错误 C2143: syntax error : missing ')' before '=' 并且宏 DLL 如下:

0 投票
3 回答
3709 浏览

c++ - extern "C" 和简单的 extern 之间的区别

我已经看到 C/C++ 代码使用在函数签名中声明的 extern "C" 以及在 CPP 文件中包含 C 标头。

但有些函数只是在签名之前声明 extern(没有“C”)。

QN1:

这两种定义函数的方式是否具有相同的效果,或者它们是否意味着不同的东西?

抱歉,如果我很傻,但我无法通过 Google 找到这种差异。

例如:

QN2:

如果函数在其签名中使用 extern 声明,是否有必要将相应的头文件包含在 extern "C" 块中?

正如另一位用户在评论中指出的那样,标记的副本并不完全满足这里的问题。我正在编辑,以便将来其他人不会被误导到不同的问题。

0 投票
1 回答
184 浏览

c++ - 围绕 C++ 类的 C 可调用包装器

我正在按照教程创建一个围绕 C++ 代码的包装器,以便可以从 C# 调用它。
我得到一个错误编译包装虽然。头文件.h

下面是源文件(body.cpp)

包装类/dll如下

我在 return 语句的包装类中得到了一个。由于某种原因,该类方法似乎无法被识别。错误内容如下:

错误 C2228:'.GetSum' 的左侧必须有类/结构/联合

令我困惑的是,这是教程中的复制和粘贴,但我的不起作用。我会错过什么?

0 投票
1 回答
634 浏览

c++ - 错误 LNK2019:未解析的外部符号

我在 Windows 7 Visual Studio 2010 中编译旧的 MFC WIN CE 嵌入式项目时遇到问题。我相信旧应用程序是在嵌入式 Visual Studio 4 中编译的并且需要 mfcce211.dll。

任何人,所有源文件都可以正常编译,但我收到以下链接器错误:

VirtualCopy 在文件 TX3922.cpp 中的 CTX3922::Initialise 中被调用,并包含:

项目属性为:

  • 在共享 DLL 中使用 MFC
  • 不使用 ATL
  • 没有公共语言运行时支持

启用 /NODEFAULTLIB 会引发很多链接器错误,包括这个错误。

我在任何地方都找不到 VirtualCopy 的声明

我错过了一个图书馆,如果是这样,有没有找到哪一个?

非常感谢

0 投票
1 回答
10651 浏览

c++ - 错误:extern "C" 上的预期 unqualified-id

我有一个 cpp 代码,我想在其中调用 ac 函数。两者都可以很好地编译为 .o 文件,但是当 clang++ 正在执行编译时,我收到以下错误:

cpp文件中的代码如下:

我怎样才能避免错误?不能用clang++编译c文件,真的需要用extern。谢谢。