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

根据看书结果来看,好像是要求在定义的时候必须一次性把所有要用到的变量都定义完,我想问的是为什么不能先定义一些,等到后面还要用的时候再定义别的呢?

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

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

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

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

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

如以下代码:

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

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

扩展资料:

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

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

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

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

参考资料:

百度百科--C语言

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-11-06

关于是否要一次性定义所有变量:

在C语言编程中,变量必须要先定义后使用,没有定义的变量或者中途定义的话可能会导致程序出错,在编程中其实并不是一定要一次性定义所有变量的,因为在编程开始时,并不是每个人都能够一次性把需要用到的变量全部想出来,一般编程思维是自己在编程过程中想到什么变量、需要用到什么类型的变量,再逐一定义后使用。

C语言的书上是为了强调注意程序的可读性,也就是让其他看程序代码的人一次能够看得懂这个变量是什么,定义的名称是什么,怎么赋值的等等,所以会写成必须一次定义所有变量,其实在编写完毕的程序中是需要写成一次性定义了的所有变量的格式,并不是要我们在编程时一次性定义所有变量的操作步骤。只要自己需要用到的变量,可以在定义变量那几行代码后面继续添加就行,不一定要刻意先想出所有变量名称、变量类型。

扩展资料:

一下是C语言中基本的变量类型:

在C语言中,常量其值不可改变,符号常量名通常用大写。变量是以某标识符为名字,其值可以改变的量。标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。变量在编译时为其分配相应存储单元。

参考资料:C语言-百度百科

本回答被网友采纳
第2个回答  2010-03-16
错。
C语言规定,标识符必须先声明,后引用。
变量名属于标识符,因此变量声明之后才能在表达式中引用。但是并不一定需要先定义。
因为变量的定义具有声明语义,即可以认为定义包含了声明,所以有了定义之后,无需额外的声明就可以使用。
例如全局变量定义int a;同时声明了a。如果使用extern int a;,那么仅仅是声明,extern表示定义不在声明所在的源文件。
关于定义和声明的区别,简单说来就是定义对应了编译结果中分配内存的指令,而声明只是通知编译器这个变量之后会被定义而已。如果声明的变量没有被定义,编译过程(包含预处理、翻译、链接三个子过程)翻译结束后,链接器会报错“无法解析的外部引用”之类,找不到变量的引用,无法生成可执行文件。
另外的一点就是如 2L SmallaySS 所说的,如果使用不符合标准的编译器——例如Microsoft C编译器或者标准制定之前的K&R C语言编译器,对于函数内的局部变量,必须集中在开头定义,否则会产生编译错误。符合ANSI C标准的编译器来编译的代码中是没必要把变量定义堆在函数开头的。(不过需要说明,编译器对分配内存空间的实现仍然可能放在函数开头统一处理,只是限定被定义的变量的作用域是在定义处至复合语句块或函数的结尾。)
====
[原创回答团]

参考资料:原创

第3个回答  2010-03-16
估计你的书有点老了...
这里涉及到内存的问题

首先变量需要先定义,后使用.
没有定义就使用变量会报错.

函数内定义的是局部变量
局部变量在定义时分配内存
在函数执行完时释放内存

在函数外定义的是全局变量
全局变量在全部文件执行时才释放内存

当然没必要一次性把所有要用到的变量都定义完
在使用前定义即可.本回答被提问者采纳
第4个回答  2010-03-16
在旧的c语言规范里是这么规定的,这样做的好处是便于一些编译器在进入函数时可以一次性分配所有需要的内存空间。
不过新的规范已经去除了这个限制,新的编译器也都解决了分配内存的问题了。
相似回答