我一直在通过Stackoverflow和网络搜索答案,似乎我正确地做到了这一点,但是我无法让它发挥作用。
我制作了一个使用extern的测试程序,(如果有所不同的话,它使用项目功能在xCode上)。我试图声明一个变量,我可以在我的程序中的任何地方访问,每当我更改该变量的值时,我希望能够访问更改的值。
到目前为止我所做的是我有一个头文件
externFile.h
和
externFile.c
当然是我的 main.c中
在externFile.h中我定义了:
extern int ply;
在main.c中我有:
int main()
{
int ply;
ply = 5;
printPly();
}
在externFile.c中我有:
void printPly(){
printf("%d is ply.\n", ply);
}
但是我收到此错误:
_ply referenced from _printPly
ld symbols not found for architecture x86_64
有没有人对此有任何想法?
编辑:感谢Weathervane和Eugene的帮助!问题在于我在main()中定义了ply,而不是在函数外部。
答案 0 :(得分:3)
您尚未在全球范围内实际定义ply
:
int main(void)
{
int ply;
ply = 5;
printPly();
}
这里,ply
是局部变量,而不是全局变量,因为它是在函数内部定义的。头文件中的extern
行不定义全局,但声明。它说“这个变量存在于某个地方”,但它没有创建它。因为没有全局定义,所以会得到未定义的引用错误。
全局变量必须在文件范围内定义,即在函数外部定义:
int ply = 5;
int main(void)
{
printPly();
}