0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

那些在C语言中存在但是不建议使用的关键词!

电子工程师 来源:嵌入式悦翔园 作者:嵌入式悦翔园 2022-08-08 10:37 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、前言

我们在学校学习或者有参加过C语言培训的话应该都通过不建议使用goto语句,但是一般都不会有人告诉你为什么不建议使用goto语句,类似于这种存在但不建议使用的关键词还有很多,今天我们就一起来看看那些在C语言中存在但是不建议使用的那些关键词!

二、慎用goto关键词

关于goto语句的争议已经不是一天两天了,大部分C语言老师在讲到goto这关键字的时候一般都会叫大家慎用goto关键字。既然goto语句C语言标准中定义了,那为什么不建议使用呢?

因为goto语句不仅让代码的可读性很差,随意的跳出还会给程序带来安全隐患。但正是这种几乎被各大公司明令禁止使用的语句,在Linux内核中却被大量使用着。这只能说明一点,那就是因为我们水平太菜了,公司怕因为你的一句goto造成代码莫名跑飞!

早期的程序员用goto来解决代码无法预料的后果,遇到什么问题就用一句goto,让程序跳转到某个指定语句。

但是如果你的水平不够,不能完全理解整个代码的执行过程的话,贸然使用goto就可以出现莫名的问题,并且程序还很难被查到!

不建议使用goto语句的原因还有以下几点原因:

goto语句可以被结构化程序的别的语句代替;

goto语句会导致程序可读性下降,因为在实际程序中,goto可以跳到任何地方,可以往前可以往后,看程序慢慢看,看到goto然后又要去找标识符到底跳到了哪里,可读性严重下降,让读程序的人很不舒服;

调试不舒服,调试程序时,由于有goto乱跳的,这就很难调试,去掉嘛,要重新写代码,不去掉,无从下手;

存在即合理,goto语句也不例外,goto它存在,确实在某些程序中使用可能有好处,但在我们学习的阶段,应该尽量不要碰这类程序,养成一个好的编程习惯。记住一句话:**别人写的goto我能看懂,但是我自己不会去写goto!**

三、慎用extern关键词

在C语言程序中,我们用extern关键字对某个变量作 “外部变量申明” ,表示该变量是一个已经定义的外部变量,编译器就会自动地在所有源文件里面查找该变量的定义。

但是在公司编程规范中有明确要求:不允许在C文件中使用 “extern” 来申明外部函数或全局变量

具体原因如下(其中一点原因):

这样使用extern来定义全局变量确实能给我们带来了很大的便利,从而节省了我们很多的时间和精力。但是这样做也会存在一些危险,比如我们在c3.c文件引用的在a1.c文件的funca函数原型由UINT funca(UINT uiValue)变为UINT funca (UINT uiValue1, UINT uiValue2)我们在编译的时候不会报错,但是在我们执行程序的时候会在使用该函数的时候存在危险,尤其是该函数若有一个参数为指针,极有可能会存在对指针的误操作,而引起异常。

嵌入式特别是单片机的程序,最易犯的错误是全局变量满天飞。此现象在早期汇编转型过来的程序员以及初学者中常见,这帮家伙几乎把全局变量当作函数形参来用。

每当看到这种程序,我总要戚眉变脸而后拍桌怒喝。没错,就是怒喝,我不否认全局变量的重要性,但我认为要十分谨慎地使用它,滥用全局变量会引申带来其它更为严重的结构性系统问题。

滥用全局变量会造成不必要的常量频繁使用,特别当这个常量没有用宏定义“正名”时,代码阅读起来将万分吃力。

会导致软件分层的不合理,全局变量相当于一条快捷通道,它容易使程序员模糊了“设备层”和“应用层”之间的边界。写出来的底层程序容易自作多情地关注起上层的应用。这在软件系统的构建初期的确效率很高,功能调试进度一日千里,但到了后期往往bug一堆,处处“补丁”,雷区遍布。说是度日如年举步维艰也不为过。

由于软件的分层不合理,到了后期维护,哪怕仅是增加修改删除小功能,往往要从上到下掘地三尺地修改,涉及大多数模块,而原有的代码注释却忘了更新修改,这个时候,交给后来维护者的系统会越来越像一个“泥潭”,注释的唯一作用只是使泥潭上方再加一些乌烟瘴气。

全局变量大量使用,少不了有些变量流连忘返于中断与主回圈程序之间。这个时候如果处理不当,系统的bug就是随机出现的,无规律的,这时候初步显示出病入膏肓的特征来了,没有大牛来力挽狂澜,注定慢性死亡。

无需多言,您已经成功得到一个畸形的系统,它处于一个神秘的稳定状态!你看着这台机器,机器也看着你,相对无言,心中发毛。你不确定它什么时候会崩溃,也不晓得下一次投诉什么时候道理。

然后,我告诉大家现实层面的后果是什么。

“老人”气昂昂,因为系统离不开他,所有“雷区”只有他了然于心。当出现紧急的bug时,只有他能够搞定。你不但不能辞退他,还要给他加薪。

新人见光死,但凡招聘来维护这个系统的,除了改出更多的bug外,基本上一个月内就走人,到了外面还宣扬这个公司的软件质量有够差够烂。

随着产品的后续升级,几个月没有接触这个系统的原创者会发现,很多雷区他本人也忘记了,于是每次的产品升级维护周期越来越长,因为修改一个功能会冒出很多bug,而按下一个bug,会弹出其他更多的bug。在这期间,又会产生更多的全局变量。终于有一天他告诉老板,不行啦不行啦,资源不够了,ram或者flash空间太小了,升级升级。

客户投诉不断,售后也快崩溃了,业务员也不敢推荐此产品了,市场份额越来越小,公司形象越来越糟糕。

以上关于extern的建议来源于黄工的分享

四、慎用指针

指针对于初学者来说本来就是一个不易理解的东西,初学者一般都不能够真正的理解指针,并且正确的使用指针,下面是初学者常犯的错误:

空指针:指针值为NULL的指针叫空指针,不能运行解引用,一旦解引用空指针就会产生段错误。

NULL在大多数系统的值为0,该地址储存操作系统重启的数据。

NULL也被当作错误标志,如果函数的返回值是指针类型,当它的值是NULL时说明执行出现错误。

如何避免空指针产生的段错误:对来历不明的指针进行解引用前要先判断是否为空

野指针:指针变量的值是不确定的,随机的,未知的,这种指针被称为野指针。

对野指针进行解引用的后果:一切正常 (运气好)、段错误 (大概率)、脏数据 (堆内存申请的越多,脏数据可能性越大)。

终结出来还是那句话:**别人写的goto我能看懂,但是我自己不会去写goto!**

五、编程规范

我在这里给大家分享一写我们公司的编程规范,大家可以学习一下!

不允许在C文件中使用“extern”来申明外部函数或全局变量;

禁止使用八进制数;

bit位变量移植性差,应避免使用。推荐使用boolean类型;

bit fields位域变量移植性差,不应使用;

uint, sint使用机器字长,虽然速度快,但有溢出风险,应避免使用;

指针的数学运算只能用在指向数组或数组元素的指针上;

指针减法只能用在指向同一数组中元素的指针上;

数组的索引应当是指针数学运算的唯一可允许的方式;

不应在指针类型和整型之间进行强制转换;

不应在某类型对象指针和其他不同类型对象指针之间进行强制转换;

如果指针所指向的类型带有const 或volatile 限定符,那么移除限定符的强制转换是不允许的;

数学运算时,应有效防止数据溢出;

六、结语

关于编程规范的问题其实还有很多需要注意的事情,如果大家感兴趣的话可以搜索一下网上总结好的编程规范范文,尤其是初学者,在最开始就要养成一个良好的编程习惯,不理解的东西就尽量不要使用!

最后愿读到这篇文章的程序员们写的代码永无bug!

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    183

    文章

    7642

    浏览量

    144583
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73127

原文标题:十年老程序员给我的一些C语言建议,真的是受益终生!

文章出处:【微信号:嵌入式悦翔园,微信公众号:嵌入式悦翔园】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    技术实践:利用房天下 API 按关键词获取房产数据列表

    ​  摘要: 本文将介绍如何调用房天下(Fang.com)提供的 API 接口,实现根据指定关键词(如楼盘名、区域、特色等)查询并获取房产列表数据的技术方案。这对于需要集成实时房产信息或进行
    的头像 发表于 11-21 14:01 93次阅读
    技术实践:利用房天下 API 按<b class='flag-5'>关键词</b>获取房产数据列表

    顺企网平台根据关键词获取企业列表API接口详解与实现

    ​  企业信息查询、市场调研或商业智能应用中,获取精准的企业列表数据至关重要。顺企网作为国内知名的企业信息平台,提供了丰富的企业数据服务。本文将重点介绍其提供的“根据关键词获取企业列表”API接口
    的头像 发表于 11-20 14:14 81次阅读
    顺企网平台根据<b class='flag-5'>关键词</b>获取企业列表API接口详解与实现

    爱回收平台根据关键词获取品牌ID的API接口详解

    ​  爱回收平台(Aihuishou)是一个专注于二手电子产品回收的服务平台,提供了丰富的API接口以支持开发者集成其功能。其中,“根据关键词获取品牌ID”的API是一个常用接口,允许用户输入品
    的头像 发表于 11-19 14:42 172次阅读
    爱回收平台根据<b class='flag-5'>关键词</b>获取品牌ID的API接口详解

    快手平台根据关键词获取视频列表的 API 接口详解

    ​ 引言 开发与短视频内容相关的应用时,经常需要根据特定关键词搜索并获取平台上的视频列表。快手作为国内领先的短视频平台,其开放平台提供了丰富的 API 接口供开发者使用。本文将详细介绍如何利用快手
    的头像 发表于 11-18 15:26 199次阅读
    快手平台根据<b class='flag-5'>关键词</b>获取视频列表的 API 接口详解

    通过携程API接口使用关键词搜索酒店列表

    的API接口,通过关键词(如酒店名、地址、地标等)来获取酒店列表数据。 一、 接口概述 接口功能:本接口主要用于根据用户输入的关键词(例如:“北京王府井”、“外滩”、“希尔顿”等)查询符合条件的酒店列表。 请求方式:通常为G
    的头像 发表于 11-17 14:57 174次阅读
    通过携程API接口使用<b class='flag-5'>关键词</b>搜索酒店列表

    搜索关键词获取商品详情接口的设计与实现

    ​   电商、内容平台等应用中,用户经常通过输入关键词搜索商品并获取详情。设计一个高效、可靠的API接口是核心需求。本文将逐步介绍如何设计并实现一个“搜索关键词获取商品详情”的接口,涵盖
    的头像 发表于 10-20 15:37 301次阅读
    搜索<b class='flag-5'>关键词</b>获取商品详情接口的设计与实现

    薄膜电容的关键词是什么你知道吗?

    薄膜电容是一种以金属箔作为电极,以聚乙酯、聚丙烯、聚苯乙烯等塑料薄膜作为电介质的电容器,电子电路中具有重要作用。薄膜电容有哪些关键词你知道吗?
    的头像 发表于 10-13 15:30 275次阅读
    薄膜电容的<b class='flag-5'>关键词</b>是什么你知道吗?

    中国信通院发布2025人工智能产业十大关键词

    2025年9月23日,2025人工智能产业及赋能新型工业化大会在北京国家会议中心召开。会上,中国信息通信研究院(简称“中国信通院”)正式发布“2025人工智能产业十大关键词”,中国信通院人工智能
    的头像 发表于 10-11 11:19 7828次阅读
    中国信通院发布2025人工智能产业十大<b class='flag-5'>关键词</b>

    中国信通院发布“2025云计算十大关键词

    日前,中国信通院正式发布“2025云计算十大关键词”,中国信通院云计算与大数据研究所所长何宝宏对“2025云计算十大关键词”进行了解读。十大关键词分别是:超大规模智算集群、大模型推理云服务、智能体
    的头像 发表于 07-30 10:53 2841次阅读
    中国信通院发布“2025云计算十大<b class='flag-5'>关键词</b>”

    Windows环境下32位汇编语言中文资料

    电子发烧友网站提供《Windows环境下32位汇编语言中文资料.rar》资料免费下载
    发表于 06-30 15:14 0次下载

    深入理解C语言C语言循环控制

    C语言编程中,循环结构是至关重要的,它可以让程序重复执行特定的代码块,从而提高编程效率。然而,为了避免程序进入无限循环,C语言提供了多种循
    的头像 发表于 04-29 18:49 1729次阅读
    深入理解<b class='flag-5'>C</b><b class='flag-5'>语言</b>:<b class='flag-5'>C</b><b class='flag-5'>语言</b>循环控制

    气密性检测干货!150个核心关键词,一文看懂

    ,JCGK精诚工科结合十余年的行业经验,整理了150个核心关键词,并撰写本文,力求用通俗易懂的语言,带您一文看懂气密性检测,建议收藏备查。(左右滑动查看完整表格)序号关
    的头像 发表于 01-15 14:13 2131次阅读
    气密性检测干货!150个核心<b class='flag-5'>关键词</b>,一文看懂

    EE-62:C语言中访问短字内存

    电子发烧友网站提供《EE-62:C语言中访问短字内存.pdf》资料免费下载
    发表于 01-07 14:02 0次下载
    EE-62:<b class='flag-5'>在</b><b class='flag-5'>C</b><b class='flag-5'>语言中</b>访问短字内存

    EE-128:C语言中的DSP:从C调用汇编类成员函数

    电子发烧友网站提供《EE-128:C语言中的DSP:从C调用汇编类成员函数.pdf》资料免费下载
    发表于 01-07 13:48 0次下载
    EE-128:<b class='flag-5'>C</b><b class='flag-5'>语言中</b>的DSP:从<b class='flag-5'>C</b>调用汇编类成员函数

    中国信通院魏亮:2024人工智能产业十大关键词解读

    “2024人工智能产业十大关键词”,并解读十大关键词反映出的新热点、新趋势。人工智能浪潮席卷全球,正以前所未有的速度、广度和深度改变生产生活方式,对全球经济社会发展和
    的头像 发表于 12-31 11:58 1628次阅读
    中国信通院魏亮:2024人工智能产业十大<b class='flag-5'>关键词</b>解读