一个函数超过1000行,可以不?

Posted ybhuangfugui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个函数超过1000行,可以不?相关的知识,希望对你有一定的参考价值。

关注+星标公众,不错过精彩内容

作者 | strongerHuang

微信公众号 | 嵌入式专栏

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

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

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

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

一个函数多少行代码合适? 超过1000行的代码有什么问题?

在编程的各种规范中,对函数代码行没有强制要求必须低于**行才行。

你一个项目所有函数都低于50行代码,是可以的。反过来,你一个函数超过一万行代码(只有main函数),如果代码没问题,也能编译通过,也是可以照常工作。

我们平时看到的“一个函数的代码尽量不要超过50行”,它其实是相对代码结构化、模块化而言的,有很多情况,代码也会超过50行,甚至上千行。

2模块化代码行数少

代码为什么要模块化?

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

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

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

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

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

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

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

比如底层驱动库函数:

还比如RTOS模块化代码:

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

甚至有的函数代码只有一行:

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

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

3多行代码的函数

模块化代码的函数,函数一般都会低于50行。但是实际编程中,其实也有很多函数是超过50行。

比如一些复杂算法、通信协议、应用代码等,这些函数都有可能超过50行。

这么说吧,像用到一些条件判断if else,或者switch case,多几个条件(比如25个),基本上这个函数代码就超过50行了。

还有像有些函数代码中,会用到很多局部变量,多定义几个变量函数代码行也会超过50行:

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

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

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

这个函数使用 if else 处理了很多触摸按键信息(上百个Touch),还包含一些指令、数据解析分类,这个函数代码行注定不会低于50行。

(当然,这个上千行的函数,肯定有优惠的空间,减少三分之一应该没问题)

4最后

一个函数超过1000行代码,理论上是可以的。但实际开发中,要尽量避免“超长行函数”,尽量控制在50 ~ 80行代码。

“超长行函数”在实际开发中也常有,如果一个函数实在太多,代码要尽量规范法,比如:代码命名、对齐、注释等。

所以,一个函数代码函数有点多,不要怀疑自己,在“压缩”代码行的同时,规范法代码就OK。

------------ END ------------

后台回复『嵌入式软件设计与开发』『嵌入式C语言』阅读更多相关文章。

欢迎关注我的公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

欢迎关注我的视频号:

点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。 

以上是关于一个函数超过1000行,可以不?的主要内容,如果未能解决你的问题,请参考以下文章

无论如何我可以一次添加超过 1000 行 CSS 前缀吗?

编写一个函数func(),将此函数的输入参数(int型)逆序输出显示,如54321 –> 12345,要求使用递归,并且函数体代码不超过8行

尺取法

输入N对位数不超过1000的正整数,求它们的和。 (编程使用struct创建一个bigNum类型?

选择前1000名,但知道有多少行?

C++怎么能间隔一定的时间执行指定的代码