gpt4 book ai didi

c++ - C:C 中的 volatile 数组

转载 作者:IT老高 更新时间:2023-10-28 21:40:35 44 4
gpt4 key购买 nike

volatile 关键字在 C 中用于防止编译器对变量执行某些优化,以及其他细微的更改。

例如;

volatile int my_int = 0;

创建一个整数。在某些情况下,它可能会阻止以下优化:

while(my_int == 0); // Loop until my_int != 0

优化到:

while(1); // Loop infinity.

这对于包括嵌入式系统中经常遇到的情况很有用,例如可能通过中断函数调用对变量进行修改的情况。还有许多其他例子说明这种技术是有用的。 my_int 可以是一个被这样的函数修改的标志。 (这只是一个玩具模型。)

但是,考虑函数修改的数据是数组的情况。数据可以由指针指向。

unsigned char* my_data = new unsigned char[256];

在这种情况下,考虑到my_data在这个问题[1]的这种特定情况下是一个全局变量,volatile关键字是多余的,还是仍然需要?

[1] 可能无关紧要。

如果答案是 volatile 关键字是必需的,那么正确的语法是什么?

例如,volatile unsigned char* my_data,我assume声明指针本身是易失的,而不是它指向的数据。

最后,在C和C++中的使用有区别吗?

最佳答案

是的,volatile是必需的,正确的声明是:

volatile unsigned char *my_data;

这将 my_data 声明为指向 volatile unsigned char 的指针。

要使指针本身易变,您需要这样做:

unsigned char *volatile my_data;

当然,指针和指向的数据都可能是易失的:

volatile unsigned char *volatile my_data;

C 和 C++ 之间没有区别。

关于c++ - C:C 中的 volatile 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25332258/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com