【发布时间】:2023-08-17 22:27:01
【问题描述】:
有一个很大的C文件,里面定义了很多字符串,在本地使用。我想从 C++ 文件中访问这些字符串,但使用 extern "C" 没有帮助。
C 文件如下所示:data.c
#include <stdio.h>
static char* str = "string\n";
void p() {
printf(str);
}
c++ 文件如下所示:
#include <iostream>
extern "C" {
extern char* str;
extern void p();
};
int main(int argc, char* argv[]) {
p();
std::cout << str;
return 0;
}
我用的是VS2013,编译报错
error LNK2001: unresolved external symbol _str
fatal error LNK1120: 1 unresolved externals
调用C文件中定义的函数没有问题。
甚至可以从 C++ 访问 C 中的变量吗?以及如何正确做?
【问题讨论】:
-
你不能。这是
static -
更多关于静态here的信息。短版:
static在此上下文中使用将变量的可见性限制为当前“翻译单元”(大致是定义它的文件)。 -
@TigerHwang - 恐怕不行。很好,它没有,或者正确的封装是不可能的。
-
static修饰符意味着您的意图是保持字段私有。如果团队的一名初级成员决定公开所有字段以便可以从任何地方访问它们,我肯定会生气。 -
您实际上要解决什么问题。告诉我们更多关于上下文的信息。这闻起来像 XY Problem。