有一个非常大的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中的变量吗?以及如何正确地做到这一点?
答案 0 :(得分:3)
在文件中使用static
关键字时。它表示以static为前缀的变量无法导出到另一个文件中。您可以将该变量保持为非静态,然后也可以在其他文件中访问这些变量。
您可以参考以下文章。 https://cboard.cprogramming.com/cplusplus-programming/102259-global-variable-access-c-cplusplus.html
答案 1 :(得分:2)
在C中,static
语句暗示不应导出符号。
因此,只需删除该关键字即可访问这些变量。
This article可能会帮助您更好地理解符号可见性概念
除此之外,虽然C可能在使用损坏的C ++符号时遇到问题,但相反的情况绝对没有兼容性问题。