![]() |
1
36
正如其他人提到的,几乎“不安全”块中的任何内容都可以产生实现定义的行为;滥用不安全块允许您更改构成运行时本身的代码字节,因此所有赌注都已取消。 整数除法的角情况有一个实现定义的行为。 抛出异常而从不捕获它会导致实现定义的行为——终止进程、启动调试器等等。 在C中还有许多其他情况,我们被迫发出具有实现决定行为的代码。例如,这种情况: http://blogs.msdn.com/ericlippert/archive/2006/04/06/odious-ambiguous-overloads-part-two.aspx 但是,安全、行为良好的C程序具有实现定义的行为的情况应该非常罕见。 |
![]() |
2
27
对!即使在一个安全的环境中也存在!(好吧,它的实现至少定义为未定义)
这是Marek Safar和Vsadov在
Roslyn issues
。C和CLI之间在以下方面不匹配:
C认为只有一种
cli认为
这种差异意味着我们可以强迫C
以上输出:
有趣的是,调试器不同意(必须以不同的方式评估真相?)
不管怎样,C小组得出的结论是(重点补充):
|
![]() |
3
13
查看wiki,不允许出现未定义行为的情况,或者在c中引发异常。 但是在不安全的代码中,我认为可能存在未定义的行为,因为这允许您使用指针等。 编辑:看起来我是对的: http://msdn.microsoft.com/en-us/library/aa664771%28VS.71%29.aspx 在C中有一个未定义行为的示例# |
![]() |
4
11
根据ECMA-334文件(第473页):
这将“定义的实现”提升到最坏的情况,请参阅EricLippert的答案。 |
![]() |
5
1
许多子程序和子程序都有如下要求:
Java和.NET语言的主要设计目标之一是除非代码使用某些被标记为“不安全”的代码,否则一般不需要特别的努力来满足上面的第二个约束(尽管一些与垃圾收集有关的行为)。
|
![]() |
6
0
一般来说,我会说不。 在初始化自动变量之前使用它。 必须初始化所有变量。如果没有发生异常。 除以零 引发异常。 索引超出界限的数组 引发异常 正如aequitarum custos指出的,您可以使用不安全的代码。再次强调,这不是真正的C,您明确地选择退出C环境。 |
![]() |
7
-1
并不是真正意义上的wiki,但我认为我想到的最明显的例子就是编写一些线程代码,但在任何语言中都是这样。 |
![]() |
Xirema · 如何正确编写运算符的R值重载 7 年前 |
![]() |
Mário Feroldi · 在运行时调用代码中未调用的函数 7 年前 |
![]() |
chqrlie · 所有位0都可以是整数的陷阱表示吗? 7 年前 |
![]() |
Vincent · 打印零,但不基于该条件退出循环 7 年前 |
![]() |
Dror K. · 用%p打印空指针是未定义的行为? 7 年前 |
![]() |
Bite Bytes · C中允许这种函数调用吗 7 年前 |
![]() |
K J Gor · C中strncpy的内存混淆 8 年前 |