我在c99标准中找到了这个
3.17.2
1 indeterminate value
either an unspecified value or a trap representation
Run Code Online (Sandbox Code Playgroud)
以上陈述对我来说并不清楚.任何人都可以解释这是什么,它的优点和缺点是什么?
一些例子将受到高度赞赏.
Who*_*aig 13
两者的区别(不确定值和陷阱表示)是基本的.在一种情况下,您没有已知的价值.在另一个中,您有一个已知无效的值.
我可以集合的一个不确定值的最简单的例子:
int a;
int b = a;
Run Code Online (Sandbox Code Playgroud)
没有与之相关的确定"价值"的概念a.它有一些东西(因为它占用了内存),但它没有定义的"什么",因此是不确定的.总体而言,这个概念听起来很简单:除非已经确定了什么,否则它不能用于任何评估(如果它有帮助,可以考虑r值)和确定性结果.
实际值取决于语言,编译器和内存管理策略.例如,在C的大多数实现中,未初始化的范围变量或由对malloc的调用返回的指针所指向的内存将包含之前存储在该地址的任何值.另一方面,大多数脚本语言会将变量初始化为某个默认值(0,""等).
关于陷阱表示,它基本上是在与基础形式定义有关的允许值的受限域之外的任何值.接下来是一个有希望的非混淆的例子.:
enum FooBar { foo=0, bar=1 };
enum FooBar fb = (enum FooBar)2;
Run Code Online (Sandbox Code Playgroud)
通常,任何位模式都落在底层存储表示所允许的空间内(在可能的枚举中int),但不被视为其正式定义的受限域的有效"值".在这个答案中可以找到关于陷阱表示及其根源的出色描述.以上只是一个非常简单的已知无效表示可能出现的代表.实际上,它在硬件中用于检测触发无效状态的值.我认为它们是"恐慌"的价值观.同样,上述代码完全是理想化的,用于证明"价值"的概念,这不是"有效的",但实际上是已知的.
| 归档时间: |
|
| 查看次数: |
2425 次 |
| 最近记录: |