大佬教程收集整理的这篇文章主要介绍了为什么在C和C之间初始化全局变量存在这种差异?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#include<stdio.h> int i; //C implementation works fine with this initialization of variable i i=108; int main() { printf("%d",i); return 0; }
#include<iostream> using namespace std; int i; i=99; int main() { cout<<i<<endl; return 0; }
现在我读到导致成功运行C版本的原因是隐式int,后来从C99版本中删除了.
1:这是否阻碍C版本成功运行?
2:如果这个隐式int是第一个代码背后的原因那么为什么编译器不会抛出“i”被定义两次的错误?
请指出我对这个概念的错误理解.
@H_404_4@
int i; i = 42;
将第二行作为对第一行中定义的内容的重新定义.如果类型匹配,则编译器接受它并将“two is”合并为一个.
在上面的例子中,类型确实匹配,因为隐式地将“make anything unkNown an int”规则应用于i的第二个定义.
例如,以下行将无法编译:
float f; f = 42;
因为第二个f将被视为一个int,它与第一个f的类型不匹配,这是一个浮点数.
关于C不是100%肯定,但我认为这个“使任何未知的东西”在C中根本就不存在.所以在全球范围内,像i = 42;不会有效,这完全独立于i之前是否已被声明或定义.
@H_404_4@ @H_404_4@以上是大佬教程为你收集整理的为什么在C和C之间初始化全局变量存在这种差异?全部内容,希望文章能够帮你解决为什么在C和C之间初始化全局变量存在这种差异?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。