如何从 C++ 源文件访问 C 源文件中的全局变量
How to access global variable in C source file from c++ source file
有一个非常大的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++符号时可能会遇到问题,但相反的情况绝对不会造成兼容性问题。
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局变量 多读取器 一个写入器多线程安全?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- C++ 在编译时具有函数计算全局变量
- 修改程序的入口点时未调用全局变量的构造函数
- 如何创建用于多个源文件的全局变量/包含/函数
- 如何从 C++ 源文件访问 C 源文件中的全局变量
- C 细分故障由全局变量在单独的源文件中引起
- 使用全局变量作为在其他源文件中分配的函数的参数
- 如何使用在源文件内的头文件中声明的全局变量
- 多个源文件中的外部全局变量未解决的链接器错误
- 为什么全局变量由另一个源文件中的类初始化
- 从C++源文件创建全局变量列表
- 如何声明和定义全局变量,以便从所有头文件/源文件中正确访问它们
- c++函数在不同的源文件中使用全局变量