c - 在不同文件中使用全局变量

标签 c

所以我想做的是在 file2.c 中使用 file1.c 中的变量。 我已经在这里看到了一些答案,但我仍然遇到与以前相同的错误。 (错误:在文件范围内被可变修改)

我在 file1.c 上的内容是这样的:

extern int num = 0;
struct abc *do_something(int n){
    num = n;
}
/*more code below*/

现在我想在 file2.c 上使用 num。我有这个:

#include <something.h> /*which has file1.h inside*/
int num;
struct list_t list[num]; /*error here*/

/*code that uses the initialized list below*/

我尝试使用类似 #define test_num num 的东西,但它也不起作用。我需要该列表在 file2 上是“全局的”,以便我可以用不同的方法使用它。

最佳答案

你实际上有两个问题。第一个与您的错误相关的是,当编译器看到您的数组 list 的声明时,num 的值是未知。编译器不知道任何其他 translation unit (包含所有头文件的源文件),它只知道它当前正在处理的翻译单元。

第二个问题比较理论化,数组的大小在编译时是固定的,在运行时改变变量num不会改变数组的大小.

第一个问题可以通过将num 的初始化移动到translation unit 来解决。实际使用的地方。哦,不要将它初始化为零,零大小的数组没有多大用处。

第二个问题可以通过使用指针和使用mallocrealloc 的动态分配来解决。

关于c - 在不同文件中使用全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34119355/

相关文章:

c - 字符串中 "*p"和 "p"的格式说明符 %s 和 %c 之间的差异

c - "for"循环出错,我认为是内存问题

c - 从 C 访问 CPU 寄存器

c - 找不到 glib.h 和 gtk.h

c - 将指针传递给 C 中的函数

c - C 中的“fopen”无法在 Unix 上打开当前目录中的现有文件

将 strtok 的结果复制到 C 中的 2 个字符串

c - GCC 的 sqrt() 编译后如何工作?使用哪种root方法?牛顿-拉夫森?

c - 如何在 C 程序中通过 PAM 查询 sssd?

c++ - 如何在 C/C++ 中以编程方式读取 linux 文件权限