如何从 C++ 源文件访问 C 源文件中的全局变量

How to access global variable in C source file from c++ source file

本文关键字:源文件 全局变量 访问 C++      更新时间:2023-10-16

有一个非常大的C文件,它定义了很多字符串并在本地使用。 我想从C++文件中访问这些字符串,但使用 extern "C" 无济于事。

C文件看起来像这样:data.c

#include <stdio.h>
static char* str = "stringn";
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 关键字时。 它表示前缀为 static 的变量无法导出到另一个文件中。 您可以将该变量保留为非静态变量,然后也可以在另一个文件中访问这些变量。

您可以参考以下文章。https://cboard.cprogramming.com/cplusplus-programming/102259-global-variable-access-c-cplusplus.html

在 C 中,static 语句意味着不应导出符号。

因此,只需删除该关键字即可访问这些变量。

本文可能会帮助您更好地了解符号可见性概念

除此之外,虽然 C 在使用损坏的C++符号时可能会遇到问题,但相反的情况绝对不会造成兼容性问题。