码迷,mamicode.com
首页 > 其他好文 > 详细

强弱符号关系

时间:2018-08-16 00:49:18      阅读:380      评论:0      收藏:0      [点我收藏+]

标签:完成   出现   关系   c中   全局   提前   编译器   函数声明   有一个   

定义与声明的关系,其实“强弱符号关系”。

谁是强符号,谁是弱符号

函数定义:强符号

函数声明:弱符号

初始化了的全局变量:强符号,我们常将这种称为定义

未初始化的全局变量:弱符号,我们常将这种称为声明

强弱符号的统一规则

①不能允许重复出现同名的强符号,但是允许重复出现有同名的弱符号

在a.c中同时定义两个全局变量int a = 100,编译无法通过。

在a.c中同时定义两个同名函数fun,也编译无法通过

可以对全局变量和函数进行重复声明,因为声明是弱符号,允许同名弱符号重复。以前学C时老师总是讲,声明可以重复,原因就来自于这里。

②有一个强符号,其它都是弱符号的话,只保留强符号,其它弱符号消失

同名符号的作用域以最前面的那个符号为准,正是因为这点原因,放在最前面的声明才能提前作用域。所以声明虽然是弱符号,遇到强符号时消失了,但是它能够提前作用域。

③全都是弱符号的话,只留一个即可,其它全部消失

比如a.c中的两个int g_var2都是弱符号,统一符号时只留其中一个,留哪一个由编译器决定。但是不管留哪一个,作用域范围以最前面的哪一个为准。同一个.c中的强弱符号统一,是在第二阶段编译时由编译器来完成的,而不同.c中的强弱符号统一,则是由第4阶段“链接”来完成的。

强弱符号关系

标签:完成   出现   关系   c中   全局   提前   编译器   函数声明   有一个   

原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9484648.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!