加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 未定义与未指定与实现定义的行为

发布时间:2020-12-16 10:37:26 所属栏目:百科 来源:网络整理
导读:维基百科有关于 undefined和 unspecified行为的页面,其中的链接在SO中的评论和答案中被广泛使用. 每一个都以一个不与其他人混淆的音符开头,但除了一个没有非常明确的句子,他们没有指出它们之间的区别. 其中一个给出了一个例子(比较2个变量的地址: a b)与注
维基百科有关于 undefined和 unspecified行为的页面,其中的链接在SO中的评论和答案中被广泛使用.

每一个都以一个不与其他人混淆的音符开头,但除了一个没有非常明确的句子,他们没有指出它们之间的区别.

其中一个给出了一个例子(比较2个变量的地址:& a<& b)与注释,这将导致C中未指定的行为,在C中未定义. 是否有可能以明确,可理解的方式确定未定义和未指定行为之间的实质性差异?

解决方法

简而言之:

>未定义的行为:这是不可行的
>未指定的行为:这是可以的,但结果可能是任何*
>实现定义的行为:这是可以的,结果可能是任何*但编译器手册应该告诉你

或者,在C标准的引用中(N4659第3节,术语和定义):

3.28 Undefined behavior: behavior for which this International Standard imposes no requirements

3.29 Unspecified behavior: behavior,for a well-formed program construct and correct data,that depends on the implementation

3.12 Implementation-defined behavior: behavior,that depends on the implementation and
that each implementation documents

编辑:*正如M.M在评论中指出的那样,说未指明行为的结果可能是任何事情都不对.事实上,正如标准本身所指出的那样,在第3.29段的说明中

The range of possible behaviors is usually delineated by this International Standard.

所以在实践中你可以了解可能的结果是什么,但究竟会发生什么取决于你的编译器/编译器标志/平台/等.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读