- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在此程序中:
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/
这段代码在 Java 中的等价物是什么?我放了一部分,我对 I/O 部分感兴趣: int fd = open(FILE_NAME, O_WRONLY); int ret = 0; if (fd =
我正在尝试将维度为 d1,d2,d3 的张量 M[a1,a2,a3] reshape 为维度为 d2, d1*d3 的矩阵 M[a2,a1*a3]。我试过 M.reshape(d2,d1*d3) 但是
我是一名优秀的程序员,十分优秀!