打印
[STM32F1]

为什么全局变量,编译器也会给其赋值呢?只有用修饰词才可以吗?

[复制链接]
670|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yangjiaxu|  楼主 | 2024-8-31 22:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么全局变量,编译器也会给其赋值呢?只有用修饰词才可以不让编译器操作全局变量数组吗?

使用特权

评论回复
沙发
azzz| | 2024-9-3 10:27 | 只看该作者
我遇到的问题是定义了全局变量,结果它在gpio初始化时会被赋值,赋值的语句是在gd32f30x_rcu.c等系统文件里面,不明白为什么全局变量会被修改

使用特权

评论回复
板凳
呐咯密密| | 2024-9-3 10:42 | 只看该作者
全局变量如果定义的时候没主动赋值,编译器会给一个随机的值,所以在使用的时候需要注意这个问题

使用特权

评论回复
地板
classroom| | 2024-9-9 16:05 | 只看该作者
编译器在处理全局变量时,主要是负责为其分配存储空间,并根据需要(如果有初始化器)进行初始化。你通过代码来控制全局变量的初始化和使用,而不是通过“阻止编译器操作”来实现。

使用特权

评论回复
5
kzlzqi| | 2024-9-17 18:45 | 只看该作者
只有用修饰词才可以不让编译器操作全局变量数组吗

使用特权

评论回复
6
故意相遇| | 2024-9-18 09:11 | 只看该作者
在编程语言中,全局变量是在程序的整个生命周期内都存在的变量,它们通常在程序启动时被分配内存,并在程序结束时释放内存。编译器对全局变量的处理方式取决于具体的编程语言和编译器实现。

使用特权

评论回复
7
风凉| | 2024-9-18 12:00 | 只看该作者
在许多编程语言中,全局变量如果没有显式初始化,编译器会自动为其赋予默认值。例如,在C语言中,全局变量如果没有显式初始化,会被自动初始化为零(对于数值类型)或空(对于指针类型)。

使用特权

评论回复
8
捧一束彼岸花| | 2024-9-18 14:00 | 只看该作者
如果程序员在声明全局变量时提供了初始值,编译器会使用这个初始值来初始化变量。

使用特权

评论回复
9
白马过平川| | 2024-9-18 16:00 | 只看该作者
编译器在处理全局变量时,会确保这些变量在程序启动时被正确初始化。这是因为全局变量在程序的整个生命周期内都有效,如果在使用前没有被正确初始化,可能会导致未定义的行为。

使用特权

评论回复
10
西洲| | 2024-9-18 20:00 | 只看该作者
在某些编程语言中,可以使用特定的修饰词来控制全局变量的行为。例如,在C语言中,可以使用static关键字来限制全局变量的作用域,使其只在定义它的文件内可见。

使用特权

评论回复
11
未说出口的像你| | 2024-9-18 22:00 | 只看该作者
在这个示例中,globalVar1没有显式初始化,编译器会自动将其初始化为0。globalVar2显式初始化为10,编译器会使用这个初始值。

使用特权

评论回复
12
在曼谷的春| | 2024-9-19 02:00 | 只看该作者
如果需要控制全局变量的初始化,可以使用特定的修饰词或编程技巧。例如,在C语言中,可以使用static关键字来限制全局变量的作用域,或者使用函数来初始化全局变量。

使用特权

评论回复
13
我吃小朋友| | 2024-9-19 06:00 | 只看该作者
总结来说,编译器会为全局变量赋予默认值是为了确保它们在使用前被正确初始化,避免未定义的行为。通过使用特定的修饰词或编程技巧,可以更灵活地控制全局变量的初始化和行为。

使用特权

评论回复
14
月亮一键变蓝| | 2024-9-19 09:00 | 只看该作者
如果最初你没赋值,可能编译器会给个随机的值

使用特权

评论回复
15
一只眠羊| | 2024-9-19 11:00 | 只看该作者
一般来说是用修饰词会好点,或者你开机就给赋个值才行

使用特权

评论回复
16
高级安全大使| | 2024-9-20 22:46 | 只看该作者
编译器也会给其赋值

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:嵌入式技术专家
简介:擅长电路设计、物联网产品开发、射频产品开发,喜欢打篮球,技术交流,欢迎各位来聊~

630

主题

2627

帖子

5

粉丝