外部变量似乎无法正常工作

时间:2017-12-04 18:52:11

标签: c variables global extern

我一直在通过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,而不是在函数外部。

1 个答案:

答案 0 :(得分:3)

您尚未在全球范围内实际定义ply

int main(void) 
{ 
    int ply; 
    ply = 5; 
    printPly(); 
}

这里,ply是局部变量,而不是全局变量,因为它是在函数内部定义的。头文件中的extern行不定义全局,但声明。它说“这个变量存在于某个地方”,但它没有创建它。因为没有全局定义,所以会得到未定义的引用错误。

全局变量必须在文件范围内定义,即在函数外部定义:

int ply = 5;

int main(void) 
{ 
    printPly(); 
}