Clang是否支持_Atomic指针算术运算?
Clang是否支持_Atomic指针算术运算?
咱们先来看你遇到的具体场景:你编写了如下的C代码(demo.c):
#include<stdio.h> int main(){ static int ia[2]; static volatile _Atomic (int *) a = (int *) (&ia[1]); if ((a += (1)) != (int *) ((int *) (&ia[1]) + (1))) printf("1"); }
这段代码在Clang下编译时会失败,报错信息如下:
<source>:5:9: error: invalid operands to binary expression ('volatile _Atomic(int *)' and 'int') 5 | if ((a += (1)) != (int *) ((int *) (&ia[1]) + (1))) | ~ ^ ~~~ 1 error generated. Compiler returned: 1
但同样的代码在GCC下却可以正常编译通过。
回到你的核心问题:Clang目前并不支持对_Atomic修饰的指针直接进行算术运算。这类指针算术操作属于GCC提供的扩展特性,而Clang是基于标准C规范实现的,并没有额外添加这个扩展——毕竟标准C并没有规定_Atomic指针必须支持算术运算,这属于编译器的可选扩展功能。
备注:内容来源于stack exchange,提问作者zhangtianhao
相关产品推荐
相关产品推荐

