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 历史记录:在C90中,这导致了UB.在C99中引入了陷阱表示,并且在C11中引入了寄存器陷阱的可能性(对于Itanium). C标准根本没有处理陷阱表示,在bitwise operators产生负零的情况下似乎没有说明. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |