相关疑难解决方法(0)

1511
推荐指数
11
解决办法
72万
查看次数

如何在C中正确使用extern关键字

我的问题是关于何时应该用externC中的关键字引用函数.

我没有看到何时应该在实践中使用它.在我编写程序时,我使用的所有函数都通过我包含的头文件提供.那么为什么extern访问头文件中没有公开的东西会有用呢?

我可能会想到如何extern正确地工作,如果是这样,请纠正我.

编辑:如果extern是头文件中没有关键字的默认声明,你应该做些什么吗?

c

227
推荐指数
7
解决办法
23万
查看次数

为什么我们需要在C++中使用extern"C"{#include <foo.h>}?

为什么我们需要使用:

extern "C" {
#include <foo.h>
}
Run Code Online (Sandbox Code Playgroud)

特别:

  • 我们什么时候应该使用它?

  • 在编译器/链接器级别发生了什么,需要我们使用它?

  • 如何在编译/链接方面解决了需要我们使用它的问题?

c++ name-mangling linkage extern-c

133
推荐指数
10
解决办法
8万
查看次数

链接器错误从Objective-C++调用C函数

我有一个奇怪的链接器问题.我的代码看起来像这样:

    double given_amount = self.modelController.levelCompleteRewardAmount;
    swrve_currency_given(swrve, (CFStringRef)@"currencyName", given_amount);
Run Code Online (Sandbox Code Playgroud)

我在两个不同的地方有这个代码:在objective-c和objective-c ++文件中.它在objective-C land中编译很好,但是swrve_currency_given()函数在我的WGController.mm文件中导致以下内容:

Undefined symbols for architecture armv7:
  "swrve_currency_given(Swrve*, __CFString const*, double)", referenced from:
      -[WGController giveTheUserSomeCashForPlayingThisLevel] in WGController.o
ld: symbol(s) not found for architecture armv7
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我不完全确定这个错误是否与Obj-C与C++有关,但感觉就像它.我的理论是它可能认为它是Obj-C类的一个函数?'swrve'代码是第三方代码,一个.h和.c文件,我像这样导入:

#import "swrve.h"

任何帮助表示赞赏!谢谢

objective-c objective-c++

26
推荐指数
2
解决办法
1万
查看次数

extern"C"对C有影响吗?

我刚刚得到一些使用extern"C"的C代码来声明这样的外部函数:

extern "C" void func();
Run Code Online (Sandbox Code Playgroud)

这是有效的C吗?我在这一行收到错误,但我不确定是不是因为这个或其他原因.

c c++ extern-c

14
推荐指数
2
解决办法
3256
查看次数

extern 内联函数被引用但未定义

void foo(void) {}我有一个我希望内联的函数(让我们称之为它)。但是我在 .cpp 文件中定义了它。
我无法将该函数移动到标头,因为它正在使用 .cpp 中的其他函数。



编辑:
下面的代码就像真实的代码一样不使用 C++ 功能。我可以明确补充:

#ifdef __cplusplus
extern "C"
#endif
Run Code Online (Sandbox Code Playgroud)

如果我想将下面的代码转换为 c99,我只需要更改我的项目属性(或 makefile,如果您愿意)而不是代码。我也在询问c++,因为它可以解决我的问题,而c99不能。
因此我的问题中的 C 和 C++ 标签是合理的。代码是可移植的,
请参阅:When to use extern "C" in C++?



编辑#2
好吧,我明白我必须将foo()定义放在头文件中。如何在不将它们移动到头文件的情况下调用func_a()func_b()from ?foo()有什么解决方法吗?



示例
文件.c/.cpp:

int    func_a (int a,    int b,    int c)    {/*...*/};
double func_b (double a, double b, double c) {/*...*/};

void   foo    (int a, double b) { // unction definition
    //...
    int myInt …
Run Code Online (Sandbox Code Playgroud)

c c++ inline extern

2
推荐指数
1
解决办法
5931
查看次数

使用extern"C"有什么潜在的缺点?

我读过了

但是,我还没有找到答案的一个问题:使用extern "C"(例如,尽可能多的函数)是否存在(可能,未来)缺点?

更具体一点:添加extern "C"接口仅使用C功能的函数是否有任何缺点; 换句话说,那些不使用@ k-five答案中列出的功能的人?

c++ extern

2
推荐指数
1
解决办法
382
查看次数

自动修改 C 库以供 C++ 使用

我想制作一个自动包装C库的工具:

#ifdef __cplusplus
extern "C" {
#endif
Run Code Online (Sandbox Code Playgroud)

但我迷茫了什么究竟需要与包裹extern "C",什么不需要。只有功能吗?任何(shock-horror)全局变量呢?还要别的吗?

如果我编写一个脚本来查找所有函数并用 包装它们extern "C",这样就足够了吗?

最后:如果库已经用它包装了它的函数,extern "C"然后它们又被包装了,我能相信没有什么不好的事情发生并且它仍然可以正常工作,还是我需要明确检查这个?

c c++

0
推荐指数
1
解决办法
74
查看次数