如何从c ++源文件

时间:2017-10-25 08:15:58

标签: c++ c static extern

有一个非常大的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中的变量吗?以及如何正确地做到这一点?

2 个答案:

答案 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 ++符号时遇到问题,但相反的情况绝对没有兼容性问题。