【嵌入式C语言】volatile关键字和const关键字

简介: 【嵌入式C语言】volatile关键字和const关键字

C语言中的volatile关键字

基本概念:在C语言中,volatile关键字修饰的变量是表示该变量是易变的,要求编译器不优化对该变量的读取。

当我们需要读取一个变量的值时,编译器为了加快访问速度,一般会在缓存中读取该变量的值,而不会直接去寄存器中去取值。我们在嵌入式开发时,经常要和各种开发板打交道,有时候寄存器的值并不是通过代码去修改的,而是某个芯片的外设修改的。也就是说,在嵌入式开发中,我们即使不通过程序修改寄存器的状态,寄存器的值可能也是变化的。加入我们在访问这种变量的时候不加volatile关键字,编译器默认会在缓存中取该变量的值,而这个值可能是一个旧值,该变量的真实值已经被外设等修改掉了,这就会出现问题,我们拿到的值并不是变量的最新值。加volatile关键字就是告诉编译器,不要进行优化,每次都去该变量的地址处去访问该值,这就保证了每次取到的都是变量的最新值

C语言中的const关键字

const用于定义一个常量,我们不能直接修改这个常量的值。

比如

const char str[] = "hello...";
//str[0] = 'a'; //编译不通过,提示不可修改

const关键字最基本的知识就是定义一个常量,其实在嵌入式中我们经常使用const定义常量来实现另一个目的。

我们知道,当我们定义一个变量或者字符串的时候,编译器会为这个变量分配内存(比如定义一个局部变量会在栈上分配内存,使用malloc为字符串在堆上分配内存等)。但是我们的堆栈内存是有限的,有时候我们希望一些变量特别是字符串不要占用堆栈内存,比如我们要打印一个字符串“hello C!”,这个字符串我们不需要对他进行任何修改,仅仅是打印这句话,并且有时候要打印很长一句话,这些长字符串会占用大量的堆栈内存,这是我们可以把他们定义为const常量,

#define  _CRT_SECURE_NO_WARNINGS 
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main()
{
  const char str[] = "hello C!hello C!hello C!hello C!hello C!hello C!hello C!hello C!hello C!";
  printf("%s\n", str);
  system("pause");
  return 0;
}

const修饰的常量会存放在常量区,不会占用堆栈内存,这就达到了节省堆栈内存的目的。


相关文章
|
1月前
|
C语言
【C语言】break 关键字详解
- `break` 关键字用于提前退出循环体或 `switch` 语句的执行。 - 在 `for`、`while` 和 `do-while` 循环中,`break` 可以帮助程序在满足特定条件时退出循环。 - 在 `switch` 语句中,`break` 用于终止 `case` 代码块的执行,避免代码“穿透”到下一个 `case`。 - 注意 `break` 只会退出最内层的循环或 `switch` 语句,确保在嵌套结构中正确使用 `break` 以避免意外的控制流行为。
114 2
|
1月前
|
传感器 安全 编译器
【C语言】enum 关键字详解
`enum`关键字在C语言中提供了一种简洁而高效的方法来定义一组相关的常量。通过使用枚举,可以提高代码的可读性、可维护性,并减少错误的发生。在实际应用中,枚举广泛用于表示状态、命令、错误码等,为开发者提供了更清晰的代码结构和更方便的调试手段。通过合理使用枚举,可以编写出更高质量、更易维护的C语言程序。
114 2
|
1月前
|
缓存 安全 编译器
【C语言】volatile 关键字详解
`volatile` 关键字在 C 语言中用于防止编译器对某些变量进行优化,确保每次访问该变量时都直接从内存中读取最新的值。它主要用于处理硬件寄存器和多线程中的共享变量。然而,`volatile` 不保证操作的原子性和顺序,因此在多线程环境中,仍然需要适当的同步机制来确保线程安全。
65 2
|
1月前
|
存储 编译器 程序员
【C语言】auto 关键字详解
`auto` 关键字用于声明局部变量的自动存储类,其作用主要体现在变量的生命周期上。尽管现代C语言中 `auto` 的使用较少,理解其历史背景和作用对于掌握C语言的存储类及变量管理仍然很重要。局部变量默认即为 `auto` 类型,因此在实际编程中,通常不需要显式声明 `auto`。了解 `auto` 关键字有助于更好地理解C语言的存储类及其在不同场景中的应用。
50 1
|
1月前
|
C语言
【C语言】continue 关键字详解
`continue` 关键字在 C 语言中用于跳过当前循环中的剩余代码,并立即开始下一次迭代。它主要用于控制循环中的流程,使程序在满足特定条件时跳过某些代码。
76 1
【C语言】continue 关键字详解
|
1月前
|
C语言
【C语言】return 关键字详解 -《回家的诱惑 ! 》
`return` 关键字在 C 语言中用于终止函数的执行,并将控制权返回给调用者。根据函数的类型,`return` 还可以返回一个值。它是函数控制流中的重要组成部分。
80 2
|
1月前
|
存储 人工智能 程序员
【C语言】一篇通关所有 “关键字”,值得收藏篇!
关键字是编程语言预定义的保留词,代表特定的操作或结构。C语言中的关键字用于定义变量类型、控制语句、存储类、数据类型等。使用这些关键字可以创建函数、控制程序的流程、声明变量和常量等。
91 0
|
8月前
|
安全 编译器 C语言
C语言中的const关键字
C语言中的const关键字
66 2
|
安全 编译器 C语言
C语言const关键字的用法总结
C语言const关键字的用法总结
76 0
|
编译器 程序员 C语言