关于C未初始化全局变量的连接问题

在分析华为软件挑战赛的C语言代码时,遇到全局变量未初始化且定义在头文件中的情况,虽然使用makefile编译通过,但在Xcode中编译时出现大量重复符号错误。经过研究发现,未初始化的全局变量在不同编译器和环境下可能产生连接问题。尽管通常建议避免在头文件中定义变量,但这个问题还涉及到了编译器的差异,例如Clang和Xcode的处理方式。最终,未能在Xcode下成功编译,暗示有时必须依赖gdb等调试工具。
摘要由CSDN通过智能技术生成

昨天今天遇到了一个很奇怪的问题~~~

缘由是在看去年华为软件挑战赛冠军的源代码时,初赛使用的是C语言开发,发现用了很多的全局变量,而且让人很奇怪的是全局变量的定义放在了一个头文件中,但是都没有初始化,这个头文件是一个万能头文件,当时觉得在连接的时候应该会出问题,但是根据提供的makefile进行编译连接时居然没毛病,让我大惑不解~~~

遇到这种问题当然就是拿出nm来看一些obj文件咯,所以查看一下生成的.o文件,发现在万能h文件中定义的全局变量的符号类型为C,用man查看了一下,发现是什么common symbol。也没多想,毕竟主要在算法的研究,所以想要调试一下这个代码,不想用gdb,用不习惯,在mac平台,就用xcode吧,打开xcode,把左右源文件拉进去,添加到编译单元,设置好头文件路径,设置好预处理宏,然后编译运行试一下呗,结果悲剧了,在解决了几个编译小问题之后,发现没法链接成功,原因是有几千个duplicate symbol。

果然还是出问题了。那么问题就来了,为什么使用makefile进行编译连接的时候完全没毛病,用xcode就jj了呢?

本着刨根问底的精神,就在网上搜索了一下,几乎千篇一律都是关于不要在头文件中放定义的。没办法了,还是只有从.o文件入手,毕竟连接问题都和.o有关,继续用nm查看ob

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值