c语言中volatile关键字的作用_staticint的值会变吗

c语言中volatile关键字的作用_staticint的值会变吗`auto`关键字用于声明自动存储变量,它是默认的存储类别

c语言中volatile关键字的作用_staticint的值会变吗"

  • auto:指定为自动变量,由编译器自动分配及释放。通常在栈上分配
  • static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部
  • register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数
  • extern:指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的对象的一个“引用“
  • const:与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)
  • volatile:与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值

目录

1. auto

2. static

3. register

4. extern

5. const

6. volatile

联系和区别:

总结:


1. auto

用于声明自动存储变量。它是默认的存储类别,可以省略不写。`auto`关键字声明的变量在函数内部具有自动存储期和块作用域。这意味着变量在声明它的块结束时被销毁,并且在该块的内部可见。例如:

void foo() {
   auto int i = 0;  // auto 关键字可以省略
}

2. static

有不同的用途。在全局作用域内的变量声明中使用`static`关键字,可以将其作用域限制在当前源文件中,该变量在整个程序执行期间都存在,但只能通过该文件内的代码访问。在局部作用域内的变量声明中使用`static`关键字,可以使变量在函数调用之间保持持久性,即变量的值在函数调用时不会被重置,并且该变量只能在声明函数内部的作用域中访问。例如:

static int globalVar;  // 静态全局变量
void foo() {
   static int count;  // 静态局部变量
}

3. register

用于建议编译器将局部变量存储在寄存器中,以便更快的访问速度。然而,这只是一个建议,并不一定会被编译器采纳。现代编译器已经足够智能,在需要时会自动选择是否将变量存储在寄存器中,因此在实际编程中很少使用`register`关键字。

4. extern

关键字用于声明在其他源文件或模块中定义的全局变量或函数。它表示该变量或函数是在其他地方定义的,而不是当前文件中定义的。它用于在一个源文件中引用另一个源文件中的全局变量或函数。例如:

extern int globalVar;  // 声明全局变量
extern void foo();  // 声明函数

5. const

用于声明常量,表示变量的值不可更改。一旦变量被声明为`const`,不能再修改它的值。`const`关键字还可以用于修饰函数的参数,表示函数在执行期间不会修改参数的值。例如:

const int MAX_VALUE = 100;  // 常量
void foo(const int num);  // 声明一个不可修改的形参

6. volatile

用于告知编译器该变量的值可能以意想不到的方式被更改,例如被硬件或多线程环境中的其他线程修改。这样的变量不会被编译器优化,每次访问时都会从内存中读取它的最新值。例如:

volatile int status;  // 声明一个易变变量

联系和区别:

1. `auto`、`static`和`register`关键字用于修饰存储类别和作用域,它们影响变量的声明方式和生命周期。

2. `extern`关键字用于声明在其他源文件中定义的全局变量或函数,它用于在一个源文件中引用另一个源文件中的实体。

3. `const`关键字用于声明常量,表示变量的值不可更改。

4. `volatile`关键字用于标记易变变量,它告知编译器该变量可能以意外的方式改变,以防止编译器对该变量的优化。

总结:

– `auto`关键字用于声明自动存储变量,它是默认的存储类别。
– `static`关键字用于限制变量的作用域或延长变量的生命周期。
– `register`关键字指示编译器将变量存储在寄存器中,但现代编译器已经智能地处理这个问题。
– `extern`关键字用于声明在其他源文件中定义的全局变量或函数。
– `const`关键字用于定义常量,表示其值不能被修改。
– `volatile`关键字用于标记变量可能以意外的方式被改变,例如通过硬件或多线程环境中的其他线程。这样的变量不会受到编译器的优化,每次访问时都会从内存中读取最新的值。它常用于访问硬件寄存器或多线程编程中。

这些关键字的使用是根据实际需要来决定的。在一般情况下,`auto`和`register`关键字很少使用,因为编译器已经能够智能地处理变量的存储和访问方式。`static`关键字常用于限制变量的作用域或延长变量的生命周期。`extern`关键字用于在不同的源文件中共享全局变量或函数。`const`关键字用于声明常量,以防止其值被修改。`volatile`关键字用于标记易变变量,以确保每次访问时都从内存中读取最新的值。

今天的文章c语言中volatile关键字的作用_staticint的值会变吗分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/83876.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注