C 全局变量 强弱符号

编译时,编译器会向汇编器输出每个全局符号,或强或弱。汇编器会将这些信息隐含的编码在可重定向目标文件中,函数和初始化的全局变量是强符号,未初始化的全局变量是弱符号。链接器对多重定义的处理规则:

1. 不允许有多个同名的强符号

2. 若有一个强符号和多个弱符号同名,则选择强符号

3. 如果有多个弱符号同名,那么任意选择一个。

据以上规则,在C中有同名的函数定义,则编译时报错;2,3不会报错,但是会改变程序的意图。

因此,定义全局变量并初始化。

 

 

### C语言全局变量的定义、使用与生命周期 #### 全局变量的定义 全局变量是在函数外部定义的变量,它的作用域覆盖整个程序的所有源文件[^2]。通常情况下,全局变量在整个程序运行期间都保持存在,直到程序结束才会被销毁。 #### 全局变量的作用域 全局变量可以在任意函数内部访问,只要该变量在其声明之后的位置被引用即可。需要注意的是,为了避免重复定义的问题,不建议在头文件(`.h`)中直接定义全局变量[^4]。可以通过 `extern` 关键字来声明一个已经在其他 `.c` 文件中定义的全局变量,从而实现跨文件共享数据的目的。 #### 全局变量的存储位置 已初始化的全局变量会被分配到 **数据段 (data)** 中,而未初始化的全局变量则位于 **BSS 段 (bss)** 中[^3]。这意味着即使没有显式赋初值给某些全局变量,默认也会有零值作为初始状态。 #### 生命周期特点 相比局部变量局限于特定范围内有效并随栈帧释放消失的特点不同,**全局变量自程序启动之时起便一直存在于内存之中直至应用程序终止为止**[^1]。因此它们非常适合用于保存那些需要跨越多个独立操作之间维持不变的数据项。 以下是关于如何正确定义以及正确运用全局变量的一个简单例子: ```c // global_variable_example.c #include <stdio.h> // 定义一个全局变量 int globalVar = 10; void modifyGlobal() { globalVar += 5; } int main() { printf("Before modification: %d\n", globalVar); modifyGlobal(); printf("After modification: %d\n", globalVar); return 0; } ``` 在这个实例里展示了怎样创建名为`globalVar` 的整型数类型的全局变量,并且演示了两个地方对其数值进行了修改的过程——一次是在主函数体内打印之前原始值;另一次则是通过调用辅助功能子程序完成增加动作后再返回查看更新后的结果。 #### 注意事项 当考虑性能优化时应谨慎对待过多依赖于频繁读写大容量或复杂结构形式下的此类成员对象情况的发生频率及其可能带来的副作用风险等问题。另外还需特别留意防止意外更改所引发不可预见后果的情形出现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值