Xcode编译C程序时全局变量重定义错误原因咨询
搞定Xcode里的"Redefinition of 'glob' as different kind of symbol"错误
嘿,你的这段C代码逻辑本身完全没问题——全局变量只定义了一次,两个函数也只是正常对它做增减操作,那为啥Xcode会报这个错呢?我来给你拆解一下:
问题出在哪?
这个错误的核心原因是:Xcode默认的编译环境里,系统已经有一个叫glob的符号了,而且它的类型和你定义的int变量完全不一样。
你可能没注意到,POSIX标准库里有个专门用来匹配文件路径的函数就叫glob(),它的声明在glob.h这个系统头文件里。Xcode在编译时会自动引入一些系统头文件(哪怕你没写#include <glob.h>,也可能被其他头文件间接包含了),这就导致你的int glob变量和系统的glob()函数撞名了——一个是变量,一个是函数,编译器当然会认为你重复定义了不同类型的符号。
怎么解决?
有两个简单的办法:
- 最推荐:给你的变量换个名字:把
glob改成my_glob或者global_counter这类不会和系统符号撞车的名字就行。修改后的代码示例:#include <stdio.h> void add(void); void sub(void); int my_glob = 10; // 重命名全局变量 int main(void) { add(); printf("Val = %d\n", my_glob); sub(); printf("Val = %d\n", my_glob); return 0; } void add(void) { my_glob++; } void sub(void) { my_glob--; } - 临时方案(不推荐长期用):如果你非要保留
glob这个名字,可以给变量加上static修饰符,把它的作用域限制在当前文件内,这样就不会和全局的系统函数冲突了。不过这种方法在多文件项目里容易出问题,所以还是换名字更稳妥。
怎么验证这个原因?
你可以试着在代码最顶部加上#include <glob.h>,然后重新编译——肯定会直接触发错误,这就实锤了是系统的glob()函数和你的变量重名导致的问题。
内容的提问来源于stack exchange,提问作者user9639282
相关产品推荐
相关产品推荐

