嵌入式面试高频知识点——C语言关键字

参考

嵌入式秋招面试中,你一定要掌握的c基础——关键字详解(1)_牛客网 (nowcoder.com)

嵌入式校招_面试经验大全【C语言】【2_关键字】_牛客网 (nowcoder.com)

static

volatile

在C语言中,volatile 关键字是一种类型修饰符,用于告诉编译器该变量的值可能会在程序的控制之外被改变。这意味着编译器在每次访问这个变量时都必须重新从内存中读取它的值,而不是使用可能已经存储在寄存器中的缓存值。这是因为某些变量的值可能会因为外部事件(如硬件中断、多线程环境中的其他线程操作等)而意外地改变,而这些变化编译器在编译时是无法预知的。

含义

  • 防止编译器优化:编译器在优化代码时,可能会将频繁访问的变量缓存到寄存器中,以减少对内存的访问次数。然而,如果变量是volatile修饰的,编译器就会避免这种优化,确保每次访问都直接从内存中读取该变量的值。
  • 保证变量的可见性:在多线程程序中,volatile可以用来确保一个线程对变量的修改对其他线程是可见的。但需要注意的是,volatile并不保证操作的原子性,也不提供线程同步机制。
  • 举例说明

    假设你正在编写一个嵌入式系统程序,该程序需要读取一个由硬件定时器更新的寄存器值。由于这个值可能会在任何时候由硬件更新,你不能依赖编译器对变量访问的优化。

    在这个例子中,timer_value 被声明为 volatile,以确保每次在 check_timer 函数中访问它时,都是从实际的硬件寄存器中读取其值,而不是从可能被编译器缓存的某个旧值中读取。这样,程序就能正确地响应硬件定时器产生的变化。

const

extern

typedef

sizeof

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值