为了账号安全,请及时绑定邮箱和手机立即绑定

如果未初始化a^a或a-是未定义的行为?

如果未初始化a^a或a-是未定义的行为?

C
慕雪6442864 2019-08-02 07:02:09
如果未初始化a^a或a-是未定义的行为?考虑一下这个项目:#include <stdio.h>int main(void){     unsigned int a;     printf("%u %u\n", a^a, a-a);     return 0;}这是不明确的行为吗?从表面上看,a是未初始化的变量。这就指向了不明确的行为。但a^a和a-a等于0的所有值a至少我认为是这样的。是否有可能以某种方式证明这种行为是有明确定义的?
查看完整描述

3 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

是的,这是未定义的行为。

首先,任何未初始化的变量都可能有“断开”(也称为“陷阱”)表示。即使一次访问该表示的尝试也会触发未定义的行为。此外,即使是非捕获类型的对象(如unsigned char)仍然可以获得特殊的依赖于平台的状态(比如Itanium上的NAT而不是A),这些状态可能会显示出它们的“不确定性价值”。

其次,未初始化的变量不一定具有稳定价值。对同一个未初始化变量的两个顺序访问可以完全读取。异类值,这就是为什么,即使两者都访问a - a是“成功”(不是陷阱),仍然不能保证a - a将评估为零。




查看完整回答
反对 回复 2019-08-03
  • 3 回答
  • 0 关注
  • 516 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信