关于c语言中规定变量必须先定义后使用的问题
答案:5 悬赏:40 手机版
解决时间 2021-04-02 22:59
- 提问者网友:謫仙
- 2021-04-02 16:31
关于c语言中规定变量必须先定义后使用的问题
最佳答案
- 五星知识达人网友:雾月
- 2021-04-02 17:02
估计你的书有点老了...
这里涉及到内存的问题
首先变量需要先定义,后使用.
没有定义就使用变量会报错.
函数内定义的是局部变量
局部变量在定义时分配内存
在函数执行完时释放内存
在函数外定义的是全局变量
全局变量在全部文件执行时才释放内存
当然没必要一次性把所有要用到的变量都定义完
在使用前定义即可.
这里涉及到内存的问题
首先变量需要先定义,后使用.
没有定义就使用变量会报错.
函数内定义的是局部变量
局部变量在定义时分配内存
在函数执行完时释放内存
在函数外定义的是全局变量
全局变量在全部文件执行时才释放内存
当然没必要一次性把所有要用到的变量都定义完
在使用前定义即可.
全部回答
- 1楼网友:胯下狙击手
- 2021-04-02 19:50
书上的未必都是对的,这个问题你自己测试一下就知道结果了。
现在的编译器一般都没有这样的问题,有些老的编译器可能会有这样的要求,估计你的书比较陈旧。
现在的编译器一般都没有这样的问题,有些老的编译器可能会有这样的要求,估计你的书比较陈旧。
- 2楼网友:底特律间谍
- 2021-04-02 19:08
当然可以,不过一次性定义完,对整个程序的层次结构把握要好点
- 3楼网友:时间的尘埃
- 2021-04-02 18:08
在旧的c语言规范里是这么规定的,这样做的好处是便于一些编译器在进入函数时可以一次性分配所有需要的内存空间。
不过新的规范已经去除了这个限制,新的编译器也都解决了分配内存的问题了。
不过新的规范已经去除了这个限制,新的编译器也都解决了分配内存的问题了。
- 4楼网友:不想翻身的咸鱼
- 2021-04-02 17:16
错。
C语言规定,标识符必须先声明,后引用。
变量名属于标识符,因此变量声明之后才能在表达式中引用。但是并不一定需要先定义。
因为变量的定义具有声明语义,即可以认为定义包含了声明,所以有了定义之后,无需额外的声明就可以使用。
例如全局变量定义int a;同时声明了a。如果使用extern int a;,那么仅仅是声明,extern表示定义不在声明所在的源文件。
关于定义和声明的区别,简单说来就是定义对应了编译结果中分配内存的指令,而声明只是通知编译器这个变量之后会被定义而已。如果声明的变量没有被定义,编译过程(包含预处理、翻译、链接三个子过程)翻译结束后,链接器会报错“无法解析的外部引用”之类,找不到变量的引用,无法生成可执行文件。
另外的一点就是如 2L SmallaySS 所说的,如果使用不符合标准的编译器——例如Microsoft C编译器或者标准制定之前的K&R C语言编译器,对于函数内的局部变量,必须集中在开头定义,否则会产生编译错误。符合ANSI C标准的编译器来编译的代码中是没必要把变量定义堆在函数开头的。(不过需要说明,编译器对分配内存空间的实现仍然可能放在函数开头统一处理,只是限定被定义的变量的作用域是在定义处至复合语句块或函数的结尾。)
====
[原创回答团]
C语言规定,标识符必须先声明,后引用。
变量名属于标识符,因此变量声明之后才能在表达式中引用。但是并不一定需要先定义。
因为变量的定义具有声明语义,即可以认为定义包含了声明,所以有了定义之后,无需额外的声明就可以使用。
例如全局变量定义int a;同时声明了a。如果使用extern int a;,那么仅仅是声明,extern表示定义不在声明所在的源文件。
关于定义和声明的区别,简单说来就是定义对应了编译结果中分配内存的指令,而声明只是通知编译器这个变量之后会被定义而已。如果声明的变量没有被定义,编译过程(包含预处理、翻译、链接三个子过程)翻译结束后,链接器会报错“无法解析的外部引用”之类,找不到变量的引用,无法生成可执行文件。
另外的一点就是如 2L SmallaySS 所说的,如果使用不符合标准的编译器——例如Microsoft C编译器或者标准制定之前的K&R C语言编译器,对于函数内的局部变量,必须集中在开头定义,否则会产生编译错误。符合ANSI C标准的编译器来编译的代码中是没必要把变量定义堆在函数开头的。(不过需要说明,编译器对分配内存空间的实现仍然可能放在函数开头统一处理,只是限定被定义的变量的作用域是在定义处至复合语句块或函数的结尾。)
====
[原创回答团]
参考资料:原创
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯