问题标签 [unspecified-behavior]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
52 浏览

c++ - 双循环变量的相等条件:未指定或未定义?

我想直接了解术语。考虑:

如果我理解正确,由于双重算术不精确,这个循环可以是有限的也可以是无限的。这是否被认为是未指定或未定义的行为?

0 投票
2 回答
166 浏览

c - 这是 C 语言未定义的行为吗?clang 和 GCC 中的不同结果

对于使用不同编译器的相同代码,我得到不同的结果。这是未定义的行为吗?

0 投票
1 回答
122 浏览

c++ - 是否将地图大小作为值插入地图未定义的行为?

编辑:这个问题不应该被关闭,如果你看看答案,你会发现它们完全不同(旧问题没有提到 C++17)。

我正在阅读一篇 PVS博客文章,其中提到了以下错误。

(减少)

根据博客文章,这是错误的。我一直认为 map 的 operator [] 调用是一个函数调用,因此 .size() 在 [] 之前排序,因为函数充当序列点。

那么为什么这是一个错误呢?

注意:我知道自 C++11 以来不存在序列点,但我使用它们是因为新的措辞对我来说更难理解。

0 投票
0 回答
33 浏览

c++ - 在一个 .o 文件中初始化的 c++ 常量是否依赖于另一个文件中定义的常量是未定义的行为?

我有一个 C++ 项目,其中有const string两个.o文件中的常量,其中一个文件中的常量使用另一个文件中的值进行初始化。这曾经可以正常工作,但现在我使用的是更新的编译器,我一启动程序就会遇到段错误,我已经将它跟踪到依赖常量的初始化。

最小等效示例:

mystruct.h:

mystruct.cc:

程序.cc:

此代码有时会出现段错误,因为mystruct::myconst在初始化时尚未mydependentconst初始化。我已经通过使变量初始化独立(有效地,mydependenconst = "ab")来修复我的代码,但我想知道:它实际上是未定义的行为,我之前只是幸运吗?

我认为这归结为我是否可以期望我的.o文件中的常量初始化的特定顺序,或者我是否必须假设该顺序是未指定的。

请注意,我在mystruct::myconst任何地方使用内部函数都没有问题,我只是在prog.cc.

背景:这发生在一个有 15 年历史的 C++ 项目(使用g++with -std=gnu++98)中,我正试图在更新的操作系统上恢复。它在 CentOS 6 上运行良好,现在我正在修复它以在 CentOS 7 上运行,接下来我也会做更新的操作系统。

0 投票
1 回答
49 浏览

c - 浮点:FLT_HAS_SUBNORM 为 0 => 出现次正常值 => 未指定的行为?

如果FLT_HAS_SUBNORM is 0并且如果在执行 FP 操作(add、mul、div 等)期间出现了次正规值(或者如果将次正规值作为这些 FP 操作的输入),则 FP 引擎的实现(即硬件实现 [FPU ]、SW 实现 [SW FP 库]、HW-SW 混合实现 [使用 HW 指令的 SW FP 库,后跟附加的 SW 后处理])可以:

  • 检测此类次正常值并将其设置为零(即flash-to-zero策略/逻辑);
  • 什么都不做[特殊](导致不可预测的输出结果值)。

问题:有人可以提供一个正确的论据(如果通过引用C/IEEE 754标准来加强,则更好)说服该案例的行为确实属于unspecified behavior类别?

注:ISO/IEC 9899:202x (E) 工作草案 — 2020 年 2 月 5 日 N2479:

3.4.4 未指明的行为

行为,是由于使用未指定的值,或本文档提供两种或多种可能性的其他行为,并且在任何情况下都没有对其选择的进一步要求

0 投票
3 回答
82 浏览

c - 关于“具有多个对象表示的对象”的未指定行为

仍在与 C (C99) 未定义和未指定的行为作斗争。

这次是以下未指定行为(附件 J.1):

将值存储在具有多个该值的对象表示的对象中时使用的表示 (6.2.6.1)。

相应的 6.2.6.1 节指出:

如果将运算符应用于具有多个对象表示的值,则使用哪个对象表示不应影响结果的值43)。如果一个值使用具有多个对象表示的类型存储在一个对象中,则未指定使用哪种表示,但不应生成陷阱表示。

附注 43:

当对象作为 type 的对象访问时,具有相同有效类型的对象可能具有相同的值xy但在其他上下文中具有不同的值。特别是,如果为 type 定义,则并不意味着。此外,并不一定意味着 和具有相同的价值;对类型值的其他操作可能会区分它们。TT==Tx == ymemcmp(&x, &y, sizeof(T)) == 0x == yxyT

我什至不明白什么是具有多个对象表示的值。例如,它是否与 0(负零和正零)的浮点表示有关?

0 投票
1 回答
198 浏览

excel - 为什么 VBA 仅在退出 Excel 时在 ComboBox 上生成“未找到方法或数据成员”错误?

我有两个 ComboBoxesSheet1.Line_ItemsSheet1.SerialNumber以及一些与两者交互的代码。整体代码工作正常,但在退出 Excel 时会生成“未找到方法或数据成员”错误。

有没有办法防止该错误发生,甚至有办法抑制错误,以便用户在关闭 Excel 时不会因错误而感到不便?

我的代码:

在此处输入图像描述

当 SerialNumber 工作时(当 Excel 打开时)

在此处输入图像描述

我唯一能想到的是,它SerialNumber会在 Excel 关闭时以某种方式被破坏?ComboBoxes 被破坏,但该_Change方法被调用并且无法再找到组合框?

Line_Items ActiveX ComboBox 是如何填充的

我有这段代码可以清除框,用值填充它,然后选择第一行

其他注意事项

我有两个组合框。更新一个更新另一个。例如,我目前在想,当我关闭 Excel 时,SerialNumber组合框会以某种方式被破坏,Line_Items值会发生变化,Line_Items_change代码会被调用,Excel 会尝试编译它,直到找到引用该SerialNumber框的代码,该框不再存在. 并抛出错误

使用 OLEObjects 后出现新错误

我改变了我的代码

原来的错误消失了,但现在我收到了这个错误:

运行时错误“1004”:对象“_Global”的方法“工作表”失败...

在此处输入图像描述

修复错误后的新_Global错误

我将代码从

错误消息代码保持不变,但错误消息更改为:

在此处输入图像描述

下一个错误 - 无法获取 OLEObject 类的 Object 属性

顶部在正常操作期间。底部是在我关闭 Excel 文件后,它会抛出“无法获取 OLEObject 类的对象属性”的调试错误,运行时错误“1004”

在此处输入图像描述

此行发生错误:

0 投票
1 回答
50 浏览

python - 在插入两列数据框而不是一列时了解 scipy 的 shapiro 行为

我有类似这样的数据框:

我想检查第 1 组和第 3 组的值之间是否存在显着差异。为此,我使用了 scipy 的 shapiro 测试来检查数据是否呈正态分布。

我在原始代码中做了一些我认为是错误的事情:

如您所见,我通过代码而不是值来过滤数据框,因此我插入了具有一个代码值和两列的数据框。

然后我做了一些我认为可以解决的事情:

所以它不是正态分布的。

当我打印插入到 shapiro 的部分时:

我有两列的数据框,它检查什么?“代码”分布?他们的一些混合?

我的问题是:
当我将两列 df 插入到 shapiro 测试时,它会检查什么?

编辑:我已经能够添加更多列并对它们运行 shapiro 测试(仅使用随机数)

0 投票
1 回答
127 浏览

c - 为什么要分两步进行位移?

Linux 内核中,我找到了以下代码:

该代码用于将系统调用参数组合成一个更广泛的变量,例如在 ia32 上,偏移量pwritev在两个 32 位寄存器中指定。

在 x64 上,loff_t并且unsigned long都是 64 位宽。在这种情况下,该high变量被忽略并且仅low被使用。在 ia32 上,loff_t是 64 位宽和unsigned long32 位宽。在这种情况下,两个参数highlow结合在一起。

我想知道为什么代码位移两次而不是一次。在提交消息和 LWN 文章中有更多关于此代码的信息:系统调用和 64 位架构,但没有对双位移位的解释。

0 投票
1 回答
76 浏览

c - 读取单元化对象的值是否会产生未定义的行为

最简单的例子:

N2346/6.3.2.1p2

如果左值指定了一个可以使用寄存器存储类声明的具有自动存储持续时间的对象(从未使用过它的地址),并且该对象未初始化(未使用初始化程序声明并且在使用之前未对其进行分配),行为未定义。

但是N2346/6.7.9p10

如果具有自动存储持续时间的对象未显式初始化,则其值是不确定的。

所以我们可以得出结论,对象被初始化为某个不确定的值不确定的值在

N2346/3.19.2p1

不确定值

未指定的值或陷阱表示

由于表示int永远不是陷阱和应用N2346/3.4.4p1

未指明的行为

行为,这是由于使用未指定的值或本文档提供两个

我们知道该程序具有未指定的行为。

这种推理在哪里失败?