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

[复制链接]
3282|16
 楼主| 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 | 显示全部楼层
编译器在处理全局变量时,主要是负责为其分配存储空间,并根据需要(如果有初始化器)进行初始化。你通过代码来控制全局变量的初始化和使用,而不是通过“阻止编译器操作”来实现。
kzlzqi 发表于 2024-9-17 18:45 来自手机 | 显示全部楼层
只有用修饰词才可以不让编译器操作全局变量数组吗
故意相遇 发表于 2024-9-18 09:11 | 显示全部楼层
在编程语言中,全局变量是在程序的整个生命周期内都存在的变量,它们通常在程序启动时被分配内存,并在程序结束时释放内存。编译器对全局变量的处理方式取决于具体的编程语言和编译器实现。
风凉 发表于 2024-9-18 12:00 | 显示全部楼层
在许多编程语言中,全局变量如果没有显式初始化,编译器会自动为其赋予默认值。例如,在C语言中,全局变量如果没有显式初始化,会被自动初始化为零(对于数值类型)或空(对于指针类型)。
捧一束彼岸花 发表于 2024-9-18 14:00 | 显示全部楼层
如果程序员在声明全局变量时提供了初始值,编译器会使用这个初始值来初始化变量。
白马过平川 发表于 2024-9-18 16:00 | 显示全部楼层
编译器在处理全局变量时,会确保这些变量在程序启动时被正确初始化。这是因为全局变量在程序的整个生命周期内都有效,如果在使用前没有被正确初始化,可能会导致未定义的行为。
西洲 发表于 2024-9-18 20:00 | 显示全部楼层
在某些编程语言中,可以使用特定的修饰词来控制全局变量的行为。例如,在C语言中,可以使用static关键字来限制全局变量的作用域,使其只在定义它的文件内可见。
未说出口的像你 发表于 2024-9-18 22:00 | 显示全部楼层
在这个示例中,globalVar1没有显式初始化,编译器会自动将其初始化为0。globalVar2显式初始化为10,编译器会使用这个初始值。
在曼谷的春 发表于 2024-9-19 02:00 | 显示全部楼层
如果需要控制全局变量的初始化,可以使用特定的修饰词或编程技巧。例如,在C语言中,可以使用static关键字来限制全局变量的作用域,或者使用函数来初始化全局变量。
我吃小朋友 发表于 2024-9-19 06:00 | 显示全部楼层
总结来说,编译器会为全局变量赋予默认值是为了确保它们在使用前被正确初始化,避免未定义的行为。通过使用特定的修饰词或编程技巧,可以更灵活地控制全局变量的初始化和行为。
月亮一键变蓝 发表于 2024-9-19 09:00 | 显示全部楼层
如果最初你没赋值,可能编译器会给个随机的值
一只眠羊 发表于 2024-9-19 11:00 | 显示全部楼层
一般来说是用修饰词会好点,或者你开机就给赋个值才行
高级安全大使 发表于 2024-9-20 22:46 来自手机 | 显示全部楼层
编译器也会给其赋值
azzz 发表于 2025-3-21 10:50 | 显示全部楼层
azzz 发表于 2024-9-3 10:27
我遇到的问题是定义了全局变量,结果它在gpio初始化时会被赋值,赋值的语句是在gd32f30x_rcu.c等系统文件里 ...

已确认是堆栈溢出导致的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

814

主题

3392

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部