C中"extern"的问题

why*_*why 2 c linux

编程时,我想将一个大文件(包含main函数)拆分为许多小文件,因此有一个常见的情况:小文件中的函数可以修改主文件中的var,所以我认为extern非常有用!

例如:

在main.c中

 extern int i = 100;
Run Code Online (Sandbox Code Playgroud)

在小.c

extern int i;
fprintf(stdout, "var from main file: %d\n", i);
Run Code Online (Sandbox Code Playgroud)

我只是想知道我的理解是对的吗?

Joh*_*ski 6

您必须更改一件事才能使其工作:extern int i = 100;在main.c中应该更改为int i = 100;

即使可以这样做,我也不认为这是一个好的设计.您提取的用于分隔文件的内容应该可以单独使用,而不需要知道内部的内容main.c.

这种重构的有用策略:首先移动数据,然后移动使用该数据的函数.也就是说,首先将i变量移动到small.c,然后移动使用的函数i.

如果要移动函数而不是数据,请尝试i作为参数传递,而不是使用extern声明来访问它.