如何在一个.c文件中使用另一个.c文件中先前定义的变量?
在 fileA.c 文件中:
int myGlobal = 0;
在 fileA.h 文件中
extern int myGlobal;
在 fileB.c 文件中:
#include "fileA.h"
myGlobal = 1;
所以它的工作原理如下:
int
)char i;
时遇到了麻烦。我在多个.c文件中声明了char i;
,但没有在相应的.h文件中放置extern char i;
,因为我希望每个文件都有一个i用于迭代目的,那么将其归属于某个特定的文件是否更好? - jdepypere.c
文件可以拥有自己的char i;
,而不共享它们。这很正常。如果您在编译或运行现有内容时遇到问题,请制作一个小示例并将其发布为新问题(Stack Overflow希望每个问题都是自包含的 - 它不是一个论坛,讨论可以转移到其他事情上)。 - RichieHindle在99.9%的情况下,共享非常量全局变量是不良的程序设计。实际上需要这样做的情况非常少,它们非常罕见,以至于我无法想出任何有效的情况,也许只有硬件寄存器的声明。
在大多数情况下,应该使用(可能是内联的)设置器/获取器函数(“public”)、文件作用域的静态变量(“private”)或不完整类型实现(“private”)。
在那些极少数需要在文件之间共享变量的情况下,请像这样做:
// file.h
extern int my_var;
// file.c
#include "file.h"
int my_var = something;
// main.c
#include "file.h"
use(my_var);
永远不要在头文件中放置任何形式的变量定义。
如果变量为:
int foo;
在第二个C文件中你声明了:
extern int foo;
其他变量必须声明为public(使用extern,public是用于C ++的),并且您必须包含该.c文件。但我建议创建适当的.h文件来定义所有变量。
例如,对于hello.c,您将拥有一个hello.h,而hello.h将存储您的变量定义。然后,另一个.c文件(如world.c)将在顶部具有以下代码:
#include "hello.h"
这将允许world.c使用在hello.h中定义的变量。
但实际稍微有点复杂。你可以使用<>来包含在操作系统路径下找到的库文件。作为初学者,我建议将所有文件放在同一个文件夹中,并使用“”语法。
extern
。这告诉编译器该变量可用,但已在其他地方声明,从而防止实例化它(再次实例化会导致链接时发生冲突)。虽然您可以将extern
声明放在C文件本身中,但通常的做法是为每个提供函数或变量给其他文件使用的.c
文件编写相应的头文件(即.h
文件),其中包含extern
声明。这样,您就避免了复制extern
声明,特别是如果它在多个其他文件中使用。对于函数也适用同样的方法,尽管对于它们不需要使用关键字extern
。
这样,您至少需要三个文件:声明变量的源文件、它的伴随头文件,执行extern
声明的第二个源文件,该文件#include
头文件以访问导出的变量(或在头文件中导出的任何其他符号)。当尝试链接此类内容时,当然需要所有源文件(或适当的目标文件),因为链接器需要解析符号,只有在链接的文件中实际存在该符号时才能完成解析。