C语言为什么要规定对所有用到的变量要“先定义,后使用”,这样做有什么好处?

如题所述

规定“所有用到的变量要先定义后使用”,编译器处理起来比较方便,不会有歧义。
因为 C++ 里面,相同名字的变量在【不同的作用域】里面,是可以重复声明的。
注:每一对"{}"就是一个作用域。

比如下面的程序是可以编译通过的:
#include
using namespace std;
int main(int argc, char *argv[])
// 作用域 1 开始
{
int a = 1;
// 作用域 2 开始
{
cout << a << endl; // 输出语句 1
int a = 2;
// 作用域 3 开始
{
cout << a << endl;// 输出语句 2
int a = 3;
// 作用域 4 开始
{
cout << a << endl;// 输出语句 3
int a = 4;
cout << a << endl;// 输出语句 4
}
}
}
return 0;
}
输出结果为:
1
2
3
4

--------------------------------------------------------------------------------
如果【没有】规定“所有用到的变量要先定义后使用”,上面的程序会怎么样呢?
那么上面这个程序就乱套了。因为可以先使用,再定义,

输出语句1~4 就不知道自己该用哪个变量 a 了(这里有4个不同的 a)。
因为不需要“先定义,后使用”,输出语句1~4可以使用定义在任何地方的哪个变量 a 。
这样,编译器就无法确定,也就无法编译了。

--------------------------------------------------------------------------------
如果规定“所有用到的变量要先定义后使用”,上面的程序会怎么样呢?
那么上面这个程序可以正常运行:
1)在输出语句1的位置为止,只有【作用域 1 】定义了一个 a : int a=1 ,因此输出 1 。

2)在输出语句2的位置为止,【作用域 1 】和【作用域 2】分别定义了一个 a :
int a=1 ;
int a=2 ;
根据就近原则,使用最内层作用域的 a ,【作用域 2】里面的 a ,输出 2 ;

3)在输出语句3的位置为止,【作用域 1 】【作用域 2】和【作用域 3】分别定义了一个 a :
int a=1 ;
int a=2 ;
int a=3 ;
根据就近原则,使用最内层作用域的 a ,【作用域 3】里面的 a ,输出 3 ;

同理可以分析输出语句4。

这就是为什么规定“所有用到的变量要先定义后使用”的原因之一吧。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-08
变量要“先定义,后使用”,就是为了在内存的相应地址中开辟一个这个变量专用的空间,也是为了计算机在使用这个变量的时候可以方便地找到这个变量在内存中所在的位置,以便于下一步的操作。

通俗点讲就是:给每个变量一个存储的位置,方便操作。本回答被提问者采纳
相似回答