因为定义就意味着给变量分配空间。暂不管重复定义有可能产生空间分配不合理的问题,首先变量名就是一个地址,只不过这个地址是由系统分配的,定义后,地址分出来,存储空间也被分配出来,变量名--地址就被固定下来。重复定义的话就要分出新地址,分配新的存储空间,原来的变量名--地址,与后来的变量名--地址,产生冲突,一样的名字,却是不同的地址,这是不允许的。
但是这种问题只会出现在标识符的链接属性一样的情况下,可以简单的理解为在同一个作用域重复定义是不可以的。如果在两个函数里分别定义int a,这种定义是可以的。因为这个a处于不同的作用域,就不算是重复定义了。
以上属于自己的理解,欢迎指正。
按照编译原理来说,C语言中定义的变量都会在对应的符号表中存储相应标记,如果有相同的变量定义,那么这个重复的变量就不能再申请符号表里的存储空间,此时编译器就会报错的。这也是考虑到程序的容易理解。个人的理解
编译原理,不能重复定义是因为编译器这个程序写死了。事实上也不应该允许重复定义,不然同一个变量一开始定义整型,后来定义字符型,那岂不是乱套了。有相关的C语言标准的,不能乱来。
同意一楼的。
或者是你是用整型方式输出,所以就被取整了。
试试下面的改动:
float temp=128;
float a=temp*5/256;
printf("%f", a);
或者这样也行:
int temp=128;
float a=temp*5.0/256;
printf("%f", a);