gpt4 book ai didi

在 C 程序 (Visual Studio) 中正确放置 volatile 修饰符

转载 作者:可可西里 更新时间:2023-11-01 11:23:29 26 4
gpt4 key购买 nike

我知道 volatile 修饰符已被广泛讨论。请不要对我大喊大叫。我知道为什么要使用它,但我正在尝试在使用 Visual Studio 2008 和 2010 的多线程 C 程序中正确使用它。在 Windows 10 上遇到了一些问题。我将修饰符放在简单声明中的位置是否重要?例如,这两个构建都成功,但我想知道编译器的含义是否有任何差异:

// difference if any between these two?
volatile char _initialized = 0;
char volatile _initialized = 0;

更复杂的声明呢?鉴于这种结构:

typedef struct _KEY_HANDLE
{
ULONG handle;
void *ptr;
} KEY_HANDLE;
...
// difference if any between these three
volatile KEY_HANDLE * key_handles = NULL;
KEY_HANDLE volatile * key_handles = NULL;
KEY_HANDLE * volatile key_handles = NULL;
...
key_handles = (PVOID) malloc(bufsz);
...

谢谢。

最佳答案

https://barrgroup.com/Embedded-Systems/How-To/C-Volatile-Keyword

根据此链接,前两个字符都是相同的。

同样,两个 KEY_HANDLE 指针是指向 volatile KEY_HANDLE 的指针,而第三个是指向非 volatile HEY_HANDLE 的 volatile 指针。

volatile KEY_HANDLE * key_handles = NULL;  //pointer to a volatile KEY_HANDLE
KEY_HANDLE volatile * key_handles = NULL; //pointer to a volatile KEY_HANDLE
KEY_HANDLE * volatile key_handles = NULL; //volatile pointer to a non-volatile KEY_HANDLE

关于在 C 程序 (Visual Studio) 中正确放置 volatile 修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53713394/

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