趣文网,分享全网好句子、好文章!

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

时间:2023-06-19 03:26:02

相关推荐

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

想了解更多精彩内容,快来关注lemoontree

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
显示评论内容(2)
  1. 央木2023-12-08 01:49央木[北京市网友]203.24.13.46
    是的,C语言是一门非常灵活的语言,可以在执行语句中定义变量,这是它的一大特点。
    顶0踩0
  2. ゛ゞ 帅、也是一种态度2023-09-13 02:37゛ゞ 帅、也是一种态度[湖北省网友]139.170.211.211
    当然可以啊,C语言支持在执行语句中定义变量,这样非常灵活。
    顶0踩0
相关阅读
「百度AI趋势解读」自然语言交互产品的当下及未来

「百度AI趋势解读」自然语言交互产品的当下及未来

一、 背景从80年代开始的近四十年时间内,我们已经跨越了四个技术时代,分别是:PC时代互联网时代移动互联网时代AI时代我们现在所处的AI时代,也正是AI

2015-11-30

频语法点:倒装 从句 非谓语分析 语法点早掌握 做题不出错

频语法点:倒装 从句 非谓语分析 语法点早掌握 做题不出错

在学习英语的过程中,同学们要掌握一个整个大框架,这个大框架分是三个不同的英语模块,一部分为语音一部分为词汇,另一部分为句法

2020-11-30

语音输入就是生产力——横向评测:百度语音输入vs讯飞语音输入

语音输入就是生产力——横向评测:百度语音输入vs讯飞语音输入

但当下阶段,讯飞语音输入法的效果则在不断降低之中,这一类型的问题为何会产生笔者无从知晓,百度语音输入能力超过了讯飞

2023-06-12

才儿坊:幼儿语言发展特点及规律

才儿坊:幼儿语言发展特点及规律

才儿坊将分享其各自的特点也发展规律

2023-07-30

智能语音平台:技能搭建与多轮交互

智能语音平台:技能搭建与多轮交互

例如:冰箱食材管控技能,说法枣吃完了,但是误识别成了早吃完了,就需要针对食物种类识别进行加强优化

2008-10-06