c语言在函数里能定义变量吗?(函数名类型和形参类型要一致吗?)

本文由创新互联(www.cdcxhl.com)小编为大家整理,本文主要介绍了c语言在函数里能定义变量相关知识,希望对你有一定的参考价值和帮助,记得关注和收藏网址哦!

成都创新互联专注于堆龙德庆企业网站建设,成都响应式网站建设公司,商城网站建设。堆龙德庆网站建设公司,为堆龙德庆等地区提供建站服务。全流程按需开发,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务

c语言在函数里能定义变量吗?

在 C(。cpp文件是按照C标准编译的),根据语法,我们可以在任何位置定义变量,只要在使用之前声明和定义变量,对位置没有特殊要求。例如,在函数中任何地方出现的For循环中,许多学生可以 t分不清C和C的区别,用VC的时候,源代码文件也是。默认为CPP。很多同学平时懒得改成。c后缀,而且感觉运行时也一样。

函数名类型和形参类型要一致吗?

c语言中定义的子函数的返回值类型和参数类型之间没有规定,可以相同也可以不同。

为什么有的宏用函数实现就不正常了?

谢谢你。

让 让我们从这样一个结论开始:不是所有的函数宏定义都可以被普通函数方便地替代(请注意单词 "方便地 ").相信题主也知道这一点。

我上次的回答介绍了使用宏定义实现一套 "超时机制和对于C语言程序。这个机制不使用普通的函数,因为宏可以带来很大的便利。

可惜还在审核中(已经超过36小时)。避免 "笨重 "代码。然而,该 "超时 "C语言中的机制并不难实现。最后一个答案建立了一套非常简单的 "超时 "通过使用usleep()函数。既然还没批下来,相关的C语言代码就在这里再写一遍。请看:

上面的C语言代码会阻塞对就绪位的等待,但不会无限期等待,最多等待5000ms(即5秒)。这种处理虽然粗糙,但确实可以解决 "无限的等待 ",但是仅仅等待就绪位就需要编写三行代码。如果有很多地方可以做 "超时 "处理,整个C语言代码看起来很啰嗦。

如果你算上 "超时 "判断语句if(get_cur_ms()-otime = 5000),至少需要4行代码。

程序员小明想到把上面略显繁琐的 "超时 "c语言代码转换成函数。他认为:封装之后,如果你想使用 "超时 "函数,你只需要一行函数调用,所以他写了下面的C语言代码:

小明定义的cond_timeout()函数接收两个参数:cond参数表示等待的条件,timeout参数表示最大等待时间(单位为ms)。如果cond条件在超时期限内仍然无效,cond_timeout()函数返回1表示等待cond超时,否则返回0表示cond条件已成功等待。

在定义了cond_timeout()函数后,小明将在上一节中等待。 "超时 "就绪位的c语言代码:

修改为:

修改后的C语言代码确实更加简洁,但是好用吗?我们编译这段代码并执行:

奇怪,thread()的thread函数明明在2秒后就设置好了。为什么它仍然输出 "暂停 "?小明对此感到不解。

其实分析小明遇到的问题就像是脑筋急转弯。如果读者像小明一样困惑,那一定是因为他们没有 不要反应。cond_timeout()函数不执行的原因是:;t工作如小明所料很简单:cond参数只是cond_timeout()函数被调用时的状态,然后线程函数thread()无论如何修改ready都不会影响cont_timeout()函数中的cond。

以上 "超时 "c语言代码can 不要被封装。想用的时候只能一行一行写?当然,封装 "超时 "代码作为一种功能。它也可以封装为一个宏:

上面的C语言代码比较简单,一个值得说明的窍门是把{}放在()里,这样整个cond_timeout宏就相当于一个语句,这是Linux内核中相当常见的宏定义方法。

Cond_timeout宏__cond条件成立,或者等待__cond条件成立超过__timeout,就会达到(!(__cond))此时这一行:

很明显,如果此时cond成立,cond_timeout宏返回的0表示 "等待条件尚未超时否则,cond_timeout宏返回的1表示 "等待条件失败,超时。

现在将cond_timeout写入主函数,测试是否能正常工作。修改后的C语言代码如下,请看:

编译并执行这段C语言代码,得到如下结果:

因为thread()函数在2秒后设置就绪,所以cond_timeout宏没有返回超时。现在将thread()函数中的sleep(2)改为sleep(6)。相关的C语言代码如下。请看:

编译并执行修改后的C语言代码,得到如下结果:

一切都符合预期。

从这一节的总结可以看出,define宏定义有时候可以做函数做不到的事情。实际上,你可以理解定义宏定义只是暂时的包装和包装C语言代码。如果调用宏,编译器将展开包。所以,define宏定义实际上只是为几行代码取了一个名字。我们使用gcc -E命令获取经过编译器预处理的C语言代码:

# gcc -E t.c获得以下结果:

可以看出,define宏定义cond_timeout本身并不生成相关的预处理代码,而是编译器直接在被调用的地方展开宏代码,与函数不同。

欢迎在评论区一起讨论提问。文章都是手工原创,每天用最简单的介绍C语言、linux等嵌入式开发。如果你喜欢我的文章,就关注一下,可以看到最近的更新和之前的文章。

c语言中主函数定义的变量在整个文件中有效?

没有。;不工作。因为main中定义的变量只在main中有效,所以它不是全局变量,而是局部变量。它对其他函数中定义的传输变量没有影响。为了达到这种效果,可以使用宏定义来定义全局变量。主函数中定义的变量是局部变量,全局变量要放在所有函数中。

分享名称:c语言在函数里能定义变量吗?(函数名类型和形参类型要一致吗?)
标题URL:http://www.shufengxianlan.com/qtweb/news12/90512.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联