关于c语言中规定变量必须先定义后使用的问题

Python09

关于c语言中规定变量必须先定义后使用的问题,第1张

并未要求一次性将所有的变量声明或者定义,只要求在使用某个变量之前先定义。变量的定义风格利弊如下:

1、变量在函数开头定义:便于修改。

2、变量就近定义:便于阅读。

3、变量在块语句的开头定义:有的临时变量放在语句块开头,可以不用在函数开头定义,并且在使用完毕后释放空间,可以这么做,但不要无故添加花括号来提高代码的结构。

一般的,为了要达到最大的兼容跨平台性,还是放在函数开头定义。因为C89规定,在任何执行语句之前,在块的开头声明所有局部变量。

如以下代码:

会报错信息:error C2065: 'salary' : undeclared identifier。

在C99以及C++中则没有这个限制,即在首次使用之前,可在块的任何位置都可以声明变量。

扩展资料:

c语言变量定义和保存格式的关系:

1、源文件保存为.c格式的话变量只能定义在最前,若保存为.cpp格式的话,变量定义较为灵活,不用在最前。

2、在C语言里,变量只能在函数的开头处声明和定义。在函数里要用到的变量必须要在开头处声明定义。声明定义的前面不能有任何其他非声明定义的语句。全局变量在函数体的外部声明定义。

而C++里(.CPP文件是按C++标准编译的),只要在用到变量前对该变量进行声明定义就行了,位置不做特别要求。而C语言的就定了在一个模块里(函数、循环体等)先声明一切所需变量后才能进行相关操作的规定。

参考资料:

百度百科--C语言

可以这样理解:定义就是分配内存空间!

定义了一个变量后,那么在内存里就有一段空间属于这个变量。

对变量的值进行操作,就是对内存中的内容进行操作。

整型变量,其实可以理解成整数,包括负整数

正整数。

比如:

int

data

//

定义一个整型变量,变量的名字为

data

相应的,系统就会有

4

个字节的内存存储这个变量。

data

=

1

对变量的操作就会修改内存中的内容。

规定“所有用到的变量要先定义后使用”,编译器处理起来比较方便,不会有歧义。

因为 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。

这就是为什么规定“所有用到的变量要先定义后使用”的原因之一吧。