ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言可以在执行语句中间定义变量吗?

2022-09-10 09:30:36  阅读:226  来源: 互联网

标签:语句 定义 C++ C语言 编译器 变量


C语言可以在执行语句中间定义变量吗?

例如:for(int i=0; i<5; i++){
                                                                                                                         }
在C++中(.CPP文件是按C++标准编译的),按照语法我们可以把变量定义在任何位置,只要在用到变量前对该变量进行声明定义就行了,位置不做特别要求,比如函数中任意位置出现的For循环中:

在这里插入图片描述
好多同学分不太清C和C++的区别,加上使用VC++等时源代码文件默认也是.cpp的,很多同学平时懒得改成.c后缀名,觉得运行时候也都一样没啥区别,所以很容易弄混。

那在C语言里面有什么要求?

一般老师会讲:

在C语言里,变量只能在函数的开头处声明和定义。

在函数里要用到的变量必须要在开头处声明定义。

声明定义的前面不能有任何其他非声明定义的语句。

全局变量在函数体的外部声明定义。

C语言老的标准的规定了在一个模块里(函数、循环体等)先声明一切所需变量后才能进行相关操作的规定。

全局变量,可以在函数外任何位置定义。

局部变量的合法定义位置,依赖于编译器遵循的C规范版本。

接下来,我们参照具体例子详细看一下:

1、仅支持C89规范的编译器,只支持在作用域起始部分定义变量。比如:
在这里插入图片描述
如果写成
在这里插入图片描述
2、支持C99或者部分支持C99的编译器:

局部变量可以定义在任何位置。

之前的第二个例子中的定义方式,在这种编译器下是合法的。

甚至部分支持C99全面的编译器,支持在for中定义变量。

在这里插入图片描述
3、目前大多数编译器,均支持任何位置定义变量,但仅有少部分支持for中定义变量,所以在编码时,不建议for中定义,会降低可移植性。

简单的说如果大家使用较老的编译器比如VC++6.0时遇到下面的代码会提示错误,因为较老的编译器要求.c文件中的局部变量定义必须放在所有执行语句前,块开头处。
在这里插入图片描述
上面的程序如果在较老的编译器下使用.c文件保存并编译的时候会出错,注意,i、j的定义是没有任何问题的,因为它们都处于局部块的开始处。但是k和m的定义就会有问题,因为它们前面有可执行语句,所以m和k应该定义在i的前后。我当时使用VS2008的时候会报错,但是现在使用VS2013编译上面程序时不会有任何问题,所以,这个使用方法到底对不对,还是要看大家的编译器,C99以后基本都使用变量就近定义的方式,因为这样十分清晰。

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

变量就近定义:便于阅读

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

总之,为了移植性更强一些,建议大家编写C语言的时候尽量将局部变量都定义在可执行语句前,块的开始处,这样不管是新的编译器或者老的编译器都可以正常编译。不过,随着变量定义就近原则的方便性的体现,可能使用变量就近定义会更好一些,至于如何抉择,大家可以根据项目需求和实际的情况而定。

标签:语句,定义,C++,C语言,编译器,变量
来源: https://www.cnblogs.com/little-monster-lhq/p/16676021.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有