大家好,欢迎来到IT知识分享网。
有关编译的时候是否将重名的变量归为重定义也是要有据可依的。
首先我们先来了解一下在编译器在编译我们的代码的时候,变量有没有初始化是不同对待的。
经过初始化的变量是强符号,而没有经过初始化的变量是用弱符号表示的。
当代码中有两个或者是多个相同的变量的时候我们根据下面的规则还判断是不是重定义:
1,当两个或者是两个以上的强符号,编译器会认为是重定义,而且会有错误给出,编译失败
2,当只有一个强符号,其他都是弱符号的时候以强符号为主,此时编译器不会认为是重定义,链接的时候会找到强符号
3, 弱都是弱符号,则不会报错,编译器通过在连接的时候会任意选择一个。
经过初始化过的变量编译后的符号放在data段中,而没有初始化的变量符号则是放在bss段中。
但是如果有很多的弱符号会不会引起什么错误呢?
假设如果所有的目标文件选择的弱符号都是一个的话我觉得那也不会有什么错误产生吧。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/157029.html