gpt4 book ai didi

c - OSAtomicCompareAndSwapPtrBarrier 的适当转换

转载 作者:行者123 更新时间:2023-11-30 18:06:23 25 4
gpt4 key购买 nike

在此程序中:

int x, y; 
int *old = &x;
int *new = &y;
int * volatile cur = &x;

OSAtomicCompareAndSwapPtrBarrier(old, new, &cur);

我收到此警告:

Incompatible pointer passing 'int *volatile *' to parameter of type 'void *volatile *'

XCode 4.0.1 的默认编译器。 (实际上是实时问题。)

现在,我知道通常我不能将 int** 转换为 void** 。但如果我不这样做,我就看不到任何方法可以在不收到上述警告的情况下比较和交换和 int* 。我是否应该忽略该警告,假设它是指针大小不统一时期的遗留物,还是我误解了某些内容?

最佳答案

我认为警告表明编译器认为从指针到指针到 int 到指针到指针到 void 的隐式转换是危险的。并不是说你不能进行这样的转换;而是说你不能进行这样的转换。该标准规定,只要满足类型对齐要求,指针就可以转换为指向不同类型的对象的指针。但有时,例如如果是 strict aliasing使用时,它可能会导致问题。

我相信在你的情况下,警告可以被忽略,或者可以通过显式强制转换来消除:

bool result = OSAtomicCompareAndSwapPtrBarrier(old, new, &(void*)cur);

另外,请确保不要忘记检查返回值;忽略原子比较和交换可能不成功(由于并发修改)这一事实很少是安全的。

关于c - OSAtomicCompareAndSwapPtrBarrier 的适当转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5560496/

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