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

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

3天内不再提示

一个函数究竟能不能超过50行呢?

strongerHuang 来源:strongerHuang 作者:strongerHuang 2021-06-11 12:46 次阅读

“一个函数的代码尽量不要超过50行”

有些读者可能看到过类似这样的描述,而自己做项目时,很多函数都比较多(超过50行),就会怀疑自己这样写是不是不对?

那么,一个函数究竟能不能超过50行呢?今天就来讨论下关于函数代码行数相关的内容。

1、关于代码行数多少的问题

一个函数多少行代码合适?超过1000行的代码有什么问题? 在编程的各种规范中,对函数代码行没有强制要求必须低于**行才行。 你一个项目所有函数都低于50行代码,是可以的。反过来,你一个函数超过一万行代码(只有main函数),如果代码没问题,也能编译通过,也是可以照常工作。 我们平时看到的“一个函数的代码尽量不要超过50行”,它其实是相对代码结构化、模块化而言的,有很多情况,代码也会超过50行,甚至上千行。

2、模块化代码行数少

代码为什么要模块化?

这个问题好比:图书馆的书籍,为什么要分类?

因为我们代码要实现各种各样的功能,代码模块化之后,会让我们更方便的管理、移植,以及后期的维护。

代码模块化是编程中的一个重要思想,有了模块化思维,开发项目会让你有事半功倍的效果。

这里可以参看之前分享的文章《嵌入式开发中的两点编程思想》。

说回来,为什么模块化代码行数少?

代码模块化,就是把要实现的细小功能模块,用一个函数封装起来,也就牵涉到本文说的函数代码行数少的问题。

你会发现很多底层驱动、中间层、应用层的代码,其实都会用到模块化编程。

比如底层驱动库函数:

poYBAGDC61eANFoEAACTnPPsANA612.jpg

还比如RTOS模块化代码:

pYYBAGDC64OAc0VkAADJbEYnZy0162.jpg

纵观这些实现模块化的代码,你会发现,每个函数的代码行数都不多,基本保持在50行一下。 甚至有的函数代码只有一行:

INT16U OSVersion (void){ return (OS_VERSION);}

当然,并不是所有的模块化代码行数都低于50行,也有100行的,也有超过200行的,但整体来说,模块化代码的行数相对都不多。

3、多行代码的函数

模块化代码的函数,函数一般都会低于50行。但是实际编程中,其实也有很多函数是超过50行。 比如一些复杂算法通信协议、应用代码等,这些函数都有可能超过50行。 这么说吧,像用到一些条件判断if else,或者switch case,多几个条件(比如25个),基本上这个函数代码就超过50行了。 还有像有些函数代码中,会用到很多局部变量,多定义几个变量函数代码行也会超过50行:

pYYBAGDC66SAcYFBAAEubmfKaqk606.jpg

通常来说,超多行函数,一般在业务逻辑应用代码中比较常见。

有时候,我们写一个应用代码,可能不知不觉(复制粘贴)就上百行代码了。(main函数实现了所有功能,是不是似存相识?)

我之前也这么干过,特意找了一下几年前写的代码,上千行的一个触摸屏处理函数:

poYBAGDC672AZoWBAAESFgIjdIk790.jpg

这个函数使用if else 处理了很多触摸按键信息(上百个Touch),还包含一些指令、数据解析分类,这个函数代码行注定不会低于50行。 (当然,这个上千行的函数,肯定有优惠的空间,减少三分之一应该没问题)

4、最后

一个函数超过1000行代码,理论上是可以的。但实际开发中,要尽量避免“超长行函数”,尽量控制在50 ~ 80行代码。 “超长行函数”在实际开发中也常有,如果一个函数实在太多,代码要尽量规范法,比如:代码命名、对齐、注释等。 所以,一个函数代码函数有点多,不要怀疑自己,在“压缩”代码行的同时,规范法代码就OK。

责任编辑:lq6

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

    关注

    3

    文章

    3866

    浏览量

    61307
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66736

原文标题:一个函数超过1000行,可以不?

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    电机用MCU控制,FOC的调制比能不能调到最大

    电机用MCU控制,FOC的调制比能不能调到最大
    发表于 04-22 07:59

    用STM32进行bootloader开发时,能不能将boot和app程序的hex合成为hex进行烧录?

    大家好,请问用STM32进行bootloader开发时,能不能将boot和app程序的hex合成为hex进行烧录?我之前分别烧录两hex,是可以实现功能的,不知道合成
    发表于 04-01 08:20

    请问7.5变频器能不能接两1.5电机?

    7.5变频器能不能接两1.5电机??
    发表于 01-09 07:47

    空开能不能直接接电机?

    各位前辈,请教下空开能不能直接接电机? 因现场需要,电机为一开一备,而控制系统(接触器和热保护等)为套,当主电机出现故障时,切换到备用电机工作,而备用电机的接线方式是:电机直接接到
    发表于 12-29 06:58

    pcb压合缓冲垫,究竟能不能让你的电路板更安全?

    pcb压合缓冲垫,究竟能不能让你的电路板更安全?
    的头像 发表于 12-27 10:13 254次阅读

    AD7980的IN-能不能接+2.5V?

    AD7980的话能不能实现,也就是AD7980的IN-能不能接+2.5V, AD7980在选型表里显示是单极性差分信号输入,但是在技术文档里,写着是伪差分模拟输入。如果是单极性差分输入的话,IN+
    发表于 12-21 07:48

    C语言中结构体能不能相加

    C语言中,结构体能不能相加?
    的头像 发表于 12-19 17:04 677次阅读
    C语言中结构体<b class='flag-5'>能不能</b>相加

    AD7616能不能识别到10MV的RMS电压

    请教下大神,因为规格书有点看不明白,想问下AD7616能不能识别到10MV的RMS电压
    发表于 12-11 07:48

    AD7760的并行IO接口和控制IO接口能不能与MCU的IO直接连接

    请问下AD7760的并行IO接口和控制IO接口能不能与MCU的IO直接连接?MCU的IO电平是3.3V。AD7760看了是差分信号输入,有没有大神做过单端输入?误差这方面怎样
    发表于 12-08 07:06

    直流电源到底能不能驱动交流灯泡发光?

    我在网上经常看到有网友在问直流电源到底能不能驱动交流灯泡发光?事实胜于雄辩,这次专门准备了一盒干电池,来实际演示一下,看看能不能发光。
    的头像 发表于 11-13 15:07 1241次阅读
    直流电源到底<b class='flag-5'>能不能</b>驱动交流灯泡发光?

    函数返回的类型是枚举,能不能将此状态赋值给char

    函数返回的类型是枚举类型,现在我在另外的子程序中调用了这个函数
    发表于 11-10 06:11

    一个定时器能不能既有输出比较又有输入捕获?

    一个定时器,比如TIM1能不能设置通道1位定时器比较,通道2位定时器输入捕获
    发表于 10-24 08:10

    STM8S能不能测量到负电压信号

    STM8S能不能测量到负电压信号
    发表于 10-15 13:37

    拼接屏能不能触屏操作?

    拼接屏能不能直接触屏操作,小编回答可以的,实际上很多客户购买拼接屏时都会提出拼接屏能不能加触摸的功能?我们回复是可以的,那是一种怎样的原理呢? 拼接屏一般是用来大屏展示,用来播放文字、图像等内容
    的头像 发表于 09-11 14:36 1090次阅读

    物联网流量卡到底能不能用?

    物联网流量卡到底能不能用?
    的头像 发表于 08-28 09:40 3425次阅读
    物联网流量卡到底<b class='flag-5'>能不能</b>用?