85得票4回答
在线IDE上程序表现异常

我找到了以下C++程序(源代码): #include <iostream> int main() { for (int i = 0; i < 300; i++) std::cout << i << " " << i...

85得票5回答
未定义的行为和序列点重新加载

考虑本主题作为以下主题的续集: 前一篇文章 未定义行为和序列点 让我们重新审视这个 有趣 且 复杂 的表达式(斜体短语来自上述主题 *微笑*):i += ++i; 我们说这会引发未定义行为。我认为当我们这样说时,我们隐含地假设i的类型是内置类型之一。 如果i的类型是用户定义的...

85得票4回答
包含未定义行为的源代码是否可以使编译器崩溃?这是否合法?

假设我要编译一些编写不良的C++源代码,其中调用了未定义行为,因此(如他们所说)“任何事情都可能发生”。 从C++语言规范认为符合标准的编译器的角度来看,在这种情况下,“任何事情”是否包括编译器崩溃(或窃取我的密码,或者以其他方式在编译时出现错误或异常行为),或者未定义行为的范围仅限于生成的...

83得票5回答
当d等于0时,为什么'd /= d'不会抛出除以零的异常?

我不太明白为什么我没有收到除以零异常:int d = 0; d /= d; 我原本预期会收到一个除以零的异常,但实际上 d == 1。 为什么当 d == 0 时,d /= d 没有抛出除以零的异常呢?

78得票3回答
如果a未初始化,那么a^a或a-a是未定义的行为吗?

考虑这个程序:#include <stdio.h> int main(void) { unsigned int a; printf("%u %u\n", a^a, a-a); return 0; } 这是未定义行为吗? 乍一看,a 是一个未初始化的变量。...

76得票5回答
在C/C++中进行无符号左移操作前掩码处理是否过于谨慎?

这个问题的动机是我在C/C++中实现密码算法(例如SHA-1),编写可移植的平台无关代码,并彻底避免未定义行为。 假设一个标准化的加密算法要求你实现以下内容: b = (a << 31) & 0xFFFFFFFF a和b是无符号32位整数。请注意,在结果中,我们会...

75得票4回答
为什么 long long 类型的 2147483647 + 1 等于 -2147483648?

为什么这段代码不能打印出相同的数字?:long long a, b; a = 2147483647 + 1; b = 2147483648; printf("%lld\n", a); printf("%lld\n", b); 我知道int变量的最大值是2147483647,因为int变量是4个...

75得票4回答
C++编译错误?

我有以下代码:#include <iostream> #include <complex> using namespace std; int main() { complex<int> delta; complex<int> m...

72得票10回答
一个检测C++未定义行为的实现?

许多C++操作会导致未定义的行为,在这种情况下,规范完全没有说明程序应该具有什么行为,并允许发生任何事情。因此,存在各种情况,人们的代码可以在Debug但无法在Release模式下编译通过,或者在进行看似不相关的更改之前工作正常,或者在一个机器上工作但在另一个机器上不工作等等。 我的问题是是...

72得票11回答
你遇到过的C语言常见未定义/未指定行为是什么?

C语言中未指定的行为示例是函数参数的求值顺序。它可能是从左到右或者从右到左,你不知道。这会影响foo(c++, c) 或 foo(++c, c) 的求值方式。 还有哪些未指定的行为会让不知情的程序员感到惊讶?