c - 如果 GCC 接受 C11 atomic_int 强制转换并且 clang 拒绝它们,这是正确的吗?
问题描述
假设我有以下 C11 程序:
#include <stdatomic.h>
int
main()
{
int x = 0; // same behaviour if `atomic_int x`, surprisingly
atomic_int y = (atomic_int) x;
}
如果我用gcc
9 编译它,我不会收到任何错误。如果我用 Apple clang
11 编译它,我会得到:
foo.c:7:17: error: used type 'atomic_int' (aka '_Atomic(int)') where arithmetic or
pointer type is required
atomic_int y = (atomic_int) x;
在各种平台上使用各种支持 C11 的Godbolt版本的 GCC、Clang 和其他编译器时,类似的问题比比皆是。无论是否--std=c11
设置,都会发生这种情况。
快速阅读C11 标准草案(在 6.5.4 中)说“类型名称应指定原子、合格或不合格的标量类型,并且操作数应具有标量类型。”这表明强制转换是合法的 - I看不到任何会说的东西。
所以,我的问题是:clang
这里有问题吗?其他编译器是否错误地接受了这个演员表?这是允许不同的clang
地方吗?gcc
(顺便说一下,更广泛的背景是,我正在使用第三方程序生成 C 代码,其中包括从intmax_t
to的转换atomic_int
。此转换适用于gcc
,这是该程序唯一支持的编译器,但是失败clang
---因此,macOSgcc
是 的别名clang
。我正在尝试找出错误所在---clang
拒绝有效代码、生成无效代码的程序或 macOS 假装编译器不是 is 的直接替代品gcc
。)
解决方案
推荐阅读
- javascript - DataTables 按具有不同数据类型的两列排序
- wordpress - WP_Query 减少每页显示的结果数量
- c# - 如何在 NUnit 3 中将整个程序集标记为不可并行化?
- angular - 以逗号作为小数分隔符的 ngx-numeric-textbox
- python - 如何修复 ImportError:Mac 上没有名为 selenium 的模块
- python-3.x - 无法从 pyspark 数据框保存到 ES
- javascript - 如何使用 webpack 编译单个文件?
- android - paddingBottom 在 Lollipop (API 21) 设备中不起作用
- java - 使用 Jemmy 启动 .exe
- c# - MongoDB C# 驱动程序:查询忽略的属性时抛出异常