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

    文章

    4331

    浏览量

    62622
  • 代码
    +关注

    关注

    30

    文章

    4788

    浏览量

    68616

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

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

收藏 人收藏

    评论

    相关推荐

    丝杆模组为什么行程不能超过两米?

    丝杆模组为什么行程不能超过两米
    的头像 发表于 12-24 17:56 114次阅读
    丝杆模组为什么行程<b class='flag-5'>不能超过</b>两米?

    C语言中申请的堆内存能不能自动释放

    C语言中申请的堆内存能不能自动释放?每次都要手动 free 太麻烦,也容易忘记。 学过 C++ 的同学,应该首先能想到智能指针。 但是这是C语言,没有类和对象、构造析构这些技术,想要自动释放很难
    的头像 发表于 11-27 09:33 118次阅读

    C语言中的头文件能不能重复包含

    C语言中的头文件能不能重复包含? 比如代码写成这样,stdio.h 连续包含了两次。 #include #include int main(){ printf("helloworld
    的头像 发表于 11-26 17:19 162次阅读

    谷景科普封装样的磁棒电感究竟能不能通用

    谷景告诉你封装样的磁棒电感究竟能不能通用编辑:谷景电子磁棒电感的选型的时候,我们通常会先关注它的封装尺寸,因为这是确保电感能够适配威廉希尔官方网站 板的关键因素。但是,有些人可能会误以为只要封装尺寸相同,任何
    发表于 11-13 22:36 0次下载

    体成型电感外壳破损还能不能

    电子发烧友网站提供《体成型电感外壳破损还能不能用.docx》资料免费下载
    发表于 10-31 10:57 0次下载

    LMH6601是不是跨导型,能不能做峰值保持威廉希尔官方网站

    我想做个峰值保持威廉希尔官方网站 ,跨导型的查到了4放大器,但是我感觉LMH6601不像是跨导型。有哪位比较懂的帮忙看下数据手册,LMH6601是不是跨导型,能不能做峰值保持威廉希尔官方网站
    发表于 09-09 06:17

    UTB定位技术能不能精准定位

    在当今科技日新月异的时代,定位技术以其广泛的应用场景和不断提升的精度,成为了多个领域的核心支撑。其中,UTB定位技术以其高精度、低延迟和高抗干扰性等特点,在众多定位技术中脱颖而出,成为精准定位领域的佼佼者。那么,UTB定位技术到底能不能精准定位?下面就给大家具体介绍
    的头像 发表于 09-03 10:07 360次阅读

    定时器回调函数能不能用ICACHE_FLASH_ATTR定义?

    非 OS SDK 在中断处理函数中,请勿使用任何 ICACHE_FLASH_ATTR 定义的函数。 请问: 1、定时器和hw定时器的回调函数是否在中断处理函数里面被调用。定时器回调
    发表于 07-22 06:33

    能不能增大LWIP sockets数超过16

    “sys/types.h”限制FD_SETSIZE为64。公司的项目用ESP32方案,用到了很多组播,还有服务端,配置文件限制了LWIP能使用sockets数最大为16,则分配socket号从48开始,超过63就会导致se
    发表于 06-13 07:47

    STVD中断中不能设置超过32767的数吗?

    也就是说在中断里面,jiffies不能超过32767. 而在中断外面,比如放在主函数或者任意其他非中断,我实测是可以通过的。 此外,我也测试过使用long类型,然后把判断清零值写的很低,同样的错误
    发表于 05-16 06:26

    电机用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

    光纤弯曲究竟能不能影响光纤传输

    光纤的传输性能受到多种因素的影响,其中弯曲是重要的因素。当光纤受到过度弯曲时,会导致光信号的传输受到干扰,从而影响光纤的传输性能。
    的头像 发表于 03-16 14:48 1803次阅读

    同VLAN不同的网段能不能互通?

    同VLAN不同的网段能不能互通? 同一个VLAN中的设备拥有相同的网络地址范围,因此它们可以通过该VLAN进行通信。而不同VLAN中的设备拥有不同的网络地址范围,它们通常不能直接互通。然而,在某些
    的头像 发表于 02-04 11:21 3107次阅读

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

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