我知道挥发性调节剂已经被讨论了很多。请不要对我大喊大叫。我知道为什么要使用它,但我正在尝试在使用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指针是指向易失性key_handle的指针,而第三个是指向非易失性hey_handle的易失性指针。
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 - 在C程序(Visual Studio)中正确放置volatile修饰符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53713394/