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

c – 变量可以在声明时使用吗?

发布时间:2020-12-16 05:04:51 所属栏目:百科 来源:网络整理
导读:为什么以下编译没有错误?: int main(){ int x = x; //I thought this should cause an error return 0;} 标准中的哪个部分解释了为什么允许这样做? 解决方法 这个问题在C中的答案与在C中的答案略有不同. 在这两种情况下,int x = x;尝试用自己初始化x. 在C
为什么以下编译没有错误?:
int main()
{
    int x = x;  //I thought this should cause an error
    return 0;
}

标准中的哪个部分解释了为什么允许这样做?

解决方法

这个问题在C中的答案与在C中的答案略有不同.

在这两种情况下,int x = x;尝试用自己初始化x.

在C:[dcl.init] / 12(N3936)中说,对具有不确定值的对象的任何评估都会导致未定义的行为,除了涉及unsigned char的某些情况.实际上有一个例子:

int f(bool b) {
    unsigned char c;
    unsigned char d = c; // OK,d has an indeterminate value
    int e = d;        // undefined behavior
    return b ? d : 0; // undefined behavior if b is true
}

在C:它更复杂.这与int b的行为非常相似; foo(b – b);这是covered in full here.

我不会重复那段文字,但结论是,在C11中:

> int a = a; &安培;一个;当且仅当系统具有int的陷阱表示时才会导致UB
> int a = a ;,没有后续出现& a,导致UB.

历史记录:在C90中,这导致了UB.在C99中引入了陷阱表示,并且在C11中引入了寄存器陷阱的可能性(对于Itanium). C标准根本没有处理陷阱表示,在bitwise operators产生负零的情况下似乎没有说明.

(编辑:李大同)

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

    推荐文章
      热点阅读