gpt4 book ai didi

c - 在 C 中使用 static const unsigned long long int 变量分配 static const double

转载 作者:行者123 更新时间:2023-12-01 13:19:29 24 4
gpt4 key购买 nike

我想从简化的测试用例开始:

const unsigned long long int neg = (const unsigned long long) -1;

#line 1 "not-num-const"
void __cgo_f_1_4(void) { static const double __cgo_undefined__4 = (neg); }

长话短说,根据 C 标准,这会是编译错误、有效代码还是未定义?或者,默认使用的 C 标准是否有所不同?

gcc 7.3 表示这是一个错误,而截至 6 月初的 gcc 9.0 实验版表示这是可以接受的。

测试代码由第三方工具生成,该工具希望了解其输入中的“neg”。该工具生成一个简单的 C 代码,通过将 gcc 作为“gcc”调用将代码提供给 gcc,并查看标准错误。

由于 gcc 改变了响应,至少从 9.0 开始,该工具显示回归。我想知道根据 C 标准哪个是正确的。该工具不一定依赖于特定的 gcc 编译器。编译器可以是 clang、icc、Visual Studio、Sun Studio 或任何向 C 标准妥协的编译器。

最佳答案

neg 不是符合 C11 标准的算术常量表达式。 (C++ 会将其视为常量。)有人讨论过要在这个特定领域使 C 与 C++ 更加一致,但这不是已发布标准的一部分。

但是,允许实现在初始化器中接受更多表达式作为常量表达式,因此允许它们接受此构造。

关于c - 在 C 中使用 static const unsigned long long int 变量分配 static const double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50998612/

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