关于c语言中规定变量必须先定义后使用的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于c语言中规定变量必须先定义后使用的问题相关的知识,希望对你有一定的参考价值。
根据看书结果来看,好像是要求在定义的时候必须一次性把所有要用到的变量都定义完,我想问的是为什么不能先定义一些,等到后面还要用的时候再定义别的呢?
并未要求一次性将所有的变量声明或者定义,只要求在使用某个变量之前先定义。变量的定义风格利弊如下:
1、变量在函数开头定义:便于修改。
2、变量就近定义:便于阅读。
3、变量在块语句的开头定义:有的临时变量放在语句块开头,可以不用在函数开头定义,并且在使用完毕后释放空间,可以这么做,但不要无故添加花括号来提高代码的结构。
一般的,为了要达到最大的兼容跨平台性,还是放在函数开头定义。因为C89规定,在任何执行语句之前,在块的开头声明所有局部变量。
如以下代码:
会报错信息:error C2065: 'salary' : undeclared identifier。
在C99以及C++中则没有这个限制,即在首次使用之前,可在块的任何位置都可以声明变量。
扩展资料:
c语言变量定义和保存格式的关系:
1、源文件保存为.c格式的话变量只能定义在最前,若保存为.cpp格式的话,变量定义较为灵活,不用在最前。
2、在C语言里,变量只能在函数的开头处声明和定义。在函数里要用到的变量必须要在开头处声明定义。声明定义的前面不能有任何其他非声明定义的语句。全局变量在函数体的外部声明定义。
而C++里(.CPP文件是按C++标准编译的),只要在用到变量前对该变量进行声明定义就行了,位置不做特别要求。而C语言的就定了在一个模块里(函数、循环体等)先声明一切所需变量后才能进行相关操作的规定。
参考资料:
百度百科--C语言
关于是否要一次性定义所有变量:
在C语言编程中,变量必须要先定义后使用,没有定义的变量或者中途定义的话可能会导致程序出错,在编程中其实并不是一定要一次性定义所有变量的,因为在编程开始时,并不是每个人都能够一次性把需要用到的变量全部想出来,一般编程思维是自己在编程过程中想到什么变量、需要用到什么类型的变量,再逐一定义后使用。
C语言的书上是为了强调注意程序的可读性,也就是让其他看程序代码的人一次能够看得懂这个变量是什么,定义的名称是什么,怎么赋值的等等,所以会写成必须一次定义所有变量,其实在编写完毕的程序中是需要写成一次性定义了的所有变量的格式,并不是要我们在编程时一次性定义所有变量的操作步骤。只要自己需要用到的变量,可以在定义变量那几行代码后面继续添加就行,不一定要刻意先想出所有变量名称、变量类型。
扩展资料:
一下是C语言中基本的变量类型:
在C语言中,常量其值不可改变,符号常量名通常用大写。变量是以某标识符为名字,其值可以改变的量。标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。变量在编译时为其分配相应存储单元。
参考资料:C语言-百度百科
参考技术B 错。C语言规定,标识符必须先声明,后引用。
变量名属于标识符,因此变量声明之后才能在表达式中引用。但是并不一定需要先定义。
因为变量的定义具有声明语义,即可以认为定义包含了声明,所以有了定义之后,无需额外的声明就可以使用。
例如全局变量定义int a;同时声明了a。如果使用extern int a;,那么仅仅是声明,extern表示定义不在声明所在的源文件。
关于定义和声明的区别,简单说来就是定义对应了编译结果中分配内存的指令,而声明只是通知编译器这个变量之后会被定义而已。如果声明的变量没有被定义,编译过程(包含预处理、翻译、链接三个子过程)翻译结束后,链接器会报错“无法解析的外部引用”之类,找不到变量的引用,无法生成可执行文件。
另外的一点就是如 2L SmallaySS 所说的,如果使用不符合标准的编译器——例如Microsoft C编译器或者标准制定之前的K&R C语言编译器,对于函数内的局部变量,必须集中在开头定义,否则会产生编译错误。符合ANSI C标准的编译器来编译的代码中是没必要把变量定义堆在函数开头的。(不过需要说明,编译器对分配内存空间的实现仍然可能放在函数开头统一处理,只是限定被定义的变量的作用域是在定义处至复合语句块或函数的结尾。)
====
[原创回答团]
参考资料:原创
参考技术C 估计你的书有点老了...这里涉及到内存的问题
首先变量需要先定义,后使用.
没有定义就使用变量会报错.
函数内定义的是局部变量
局部变量在定义时分配内存
在函数执行完时释放内存
在函数外定义的是全局变量
全局变量在全部文件执行时才释放内存
当然没必要一次性把所有要用到的变量都定义完
在使用前定义即可.本回答被提问者采纳 参考技术D 在旧的c语言规范里是这么规定的,这样做的好处是便于一些编译器在进入函数时可以一次性分配所有需要的内存空间。
不过新的规范已经去除了这个限制,新的编译器也都解决了分配内存的问题了。
C语言和汇编怎样引用对方定义的变量?
我在此提问的不是参数传递的问题。在汇编中定义 Ref1 DCD 0x00000000 Ref2 DCD 0x00000000在C语言中怎样引用 Ref1、Ref2 ,或者怎样去修改 Ref1、Ref2 的内容。在C语言中定义 int Num1; int Num2;在汇编语言中怎样引用 Num1、Num2,或者怎样修改 Num1、Num2 的内容
C中要使用汇编里面函数的话 需要在汇编里面使用export xxx 导出函数标号 C中加extern xxx汇编要使用C里面的函数的话 需要在汇编里使用import xxx 导入外部标号 参考技术A 汇编加global定义,加“_”区别。比如C中的定义是Num1,汇编中就是_Num1,两者是等同的。对了,你没说你的处理器和开发环境是什么,所以定义也有可能如楼上所说。 参考技术B C语言的方法:假定A模块有一个变量int g_nVarA需要给别的模块引用,其方法为:
1)在A.c源文件中定义变量:
int g_nVarA;
2)在A.h头文件中申明该变量:
extern int g_nVarA;
3)所有需要用到该变量的模块包含A的头文件:
#include "A.h"
这样,既可以引用g_nVarA变量,又可以避免重复定义。 参考技术C 用指针。
以32位系统为例:
unsigned short int *ptr=0x00000000;
然后就可以利用ptr管理地址为0,1的内存空间了。如:
*ptr=100;
就可以把该字的值设置为100 参考技术D 楼上的说法并不正确,要看Ref1是定义在哪个段,如果是在代码段,当然是常量,如果是在数据段,那当然可以修改,只不过相当于有个0的初值的unsinged
long变量而已。
以上是关于关于c语言中规定变量必须先定义后使用的问题的主要内容,如果未能解决你的问题,请参考以下文章