侵权投诉

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

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

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

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

收藏 人收藏
分享:

评论

相关推荐

行云流水般的代码难写吗?那是你还缺一种硬件思维

发表于 07-23 17:12 61次 阅读
行云流水般的代码难写吗?那是你还缺一种硬件思维

基于STM32的多种printf用法

在调试代码的时候,最常用的就是使用printf函数来输出一些打印信息,提示自己代码的执行情况。 如果....
的头像 汽车玩家 发表于 07-23 11:12 55次 阅读
基于STM32的多种printf用法

STM32程序无法进入main函数的解决方法

很多人在基于STM32单片机项目开发过程中,会遇到STM32程序无法进入main的现象,在这篇文将分....
的头像 如意 发表于 07-22 16:18 61次 阅读
STM32程序无法进入main函数的解决方法

如何去编写一种PWM初始化函数?

如何去编写一种PWM初始化函数? ADC如何进行初始化呢? 电调首次使用为什么需设置量程? ...
发表于 07-21 07:34 0次 阅读
如何去编写一种PWM初始化函数?

有关永磁同步电机控制策略的代码

有关永磁同步电机控制策略的代码有哪些?
发表于 07-20 08:30 0次 阅读
有关永磁同步电机控制策略的代码

如何把代码分块来写

一、 在做题过程中要把代码分块写,比如数码管、按键等等。 二、 在比赛半小时之前是可以提前进入考场的,在这段时间里,你要用最...
发表于 07-20 06:32 0次 阅读
如何把代码分块来写

华硕主板错误代码是什么

华硕主板错误代码(1)POWER,POWEROK,RESET,CLK,REQ#,A20M#,M/IO#信号错误;(2)HA,HD,AD,S...
发表于 07-16 07:50 0次 阅读
华硕主板错误代码是什么

如何使用arm内核库的矩阵计算函数

我们在嵌入式上跑矩阵运算时候,会遇到这样一个问题。假设将矩阵设置成N*N维的二维数组后,我们想求两个矩阵相乘,那就需要按照...
发表于 07-16 06:56 0次 阅读
如何使用arm内核库的矩阵计算函数

关于F5汇编代码不能转成c的伪代码的几个问题总结

IDA逆向程序的经验总结关于F5汇编代码不能转成c的伪代码的几个问题总结关于一些类型转换以及指针和地址的总结最可以拿来当教...
发表于 07-16 06:31 0次 阅读
关于F5汇编代码不能转成c的伪代码的几个问题总结

为什么要将flash操作代码拷贝到ram中执行

最近在做飞思卡尔16位单片机的在线升级bootloader程序。有2个问题不太清楚,请教下论坛里的高人。1.bootloader程序中,对存放应用...
发表于 07-16 06:10 0次 阅读
为什么要将flash操作代码拷贝到ram中执行

如何移植C语言的printf()函数到51单片机上?

如何移植C语言的printf()函数到51单片机上?有什么方法? 怎样去实现在51单片机的串口类pc端的printf()输出? ...
发表于 07-15 13:02 0次 阅读
如何移植C语言的printf()函数到51单片机上?

如何提高C语言编程代码的效率?

如何提高C语言编程代码的效率? 如何减少程序中的bug? 如何解决单片机的抗干扰性问题? 如何测试单片机系统的可靠性? ...
发表于 07-15 08:49 0次 阅读
如何提高C语言编程代码的效率?

教你们C语言打印如何输出红色字体

除了Linux,在VS下也可以实现变色这一效果,先看下面的一段代码: #include 《stdio....
的头像 高速PCB硬件设计 发表于 07-08 12:48 193次 阅读
教你们C语言打印如何输出红色字体

基于发线虫神经学及 微型机器人相关研究

给一个活体生物躯体注入机器的“大脑”,然后人为控制该生物的行为,已经从科幻片走入现实世界。 近日,国....
的头像 电子工程世界 发表于 07-07 11:43 693次 阅读
基于发线虫神经学及 微型机器人相关研究

认真读完这21句话你的机器学习就算是入门了

【编者按】这是一篇关于机器学习工具包Scikit-learn的入门级读物。对于程序员来说,机器学习的....
的头像 ViTEX机器视觉 发表于 07-06 17:42 360次 阅读
认真读完这21句话你的机器学习就算是入门了

鸿蒙股票代码

       正宗的华为鸿蒙概念股有:常山北明,中科创达,诚迈科技,先进数通,蓝盾股份,北信源, 易....
的头像 汽车玩家 发表于 07-06 17:30 1497次 阅读
鸿蒙股票代码

浅析新塘031 串口PDMA通信

环境搭建这里就跳过了,没啥用,我还是用KEIL 5 开发,自行下载个PACK包安装就好了。点此前往新....
的头像 5G网通信 发表于 07-06 17:16 280次 阅读
浅析新塘031 串口PDMA通信

掌握这几种方法 你的接口查询速度将飞速提升

1. MySQL查询慢是什么体验? 大多数互联网应用场景都是读多写少,业务逻辑更多分布在写上。对读的....
的头像 C语言专家集中营 发表于 07-06 14:38 165次 阅读
掌握这几种方法 你的接口查询速度将飞速提升

golang的调度模型-GPM 模型的源码结构

【导读】GMP 模型是让 go 语言轻量快速高效的重要调度模型,本文从 GMP 源码出发直观地解析了....
的头像 阿铭linux 发表于 07-06 11:55 181次 阅读
golang的调度模型-GPM 模型的源码结构

如何使用Python-OpenCV实现餐盘水果识别与计价的应用

导读本文主要介绍使用Python-OpenCV实现餐盘水果识别与计价的应用。 测试图像与说明 使用图....
的头像 ViTEX机器视觉 发表于 07-06 11:02 395次 阅读
如何使用Python-OpenCV实现餐盘水果识别与计价的应用

基于OpenCV经典霍夫变换的一些内容

本文主要讲述的是霍夫变换的一些内容,并加入一些在生活中的应用,希望能对读者对于霍夫变换的内容有所了解....
的头像 ViTEX机器视觉 发表于 07-06 10:43 195次 阅读
基于OpenCV经典霍夫变换的一些内容

解析CPU究竟是怎么执行一条指令的?

【Linux 从头学】是什么这两年多以来,我的本职工作重心一直是在 x86 Linux 系统这一块,....
的头像 FPGA之家 发表于 07-06 10:21 305次 阅读
解析CPU究竟是怎么执行一条指令的?

printf格式化输出符号参数详解

printf格式化输出符号参数详解
发表于 07-06 09:12 28次 阅读
printf格式化输出符号参数详解

超实用的任务优化与断点执行方案

前言 随着大数据时代的快速发展,企业每天需要存储、计算、分析数以万亿的数据,同时还要确保分析的数据具....
的头像 QNX 发表于 07-05 16:33 209次 阅读
超实用的任务优化与断点执行方案

C语言的函数调用程序和函数逆向分析

IDA可以很好地识别函数的起始位置和结束位置,如果在逆向分析的过程中发现有分析不准确的时候,可以通过....
的头像 5G网通信 发表于 07-05 15:52 150次 阅读
C语言的函数调用程序和函数逆向分析

FPGA动态可重构技术是什么,局部动态可重构的时序问题解决方案

所谓FPGA动态可重构技术,就是要对基于SRAM编程技术的FPGA实现全部或部分逻辑资源的动态功能变....
的头像 TeacherGaoFPGAHub 发表于 07-05 15:41 187次 阅读
FPGA动态可重构技术是什么,局部动态可重构的时序问题解决方案

eBPF是什么以及eBPF能干什么

一、eBPF是什么 eBPF是extended BPF的缩写,而BPF是Berkeley Packe....
的头像 Linux阅码场 发表于 07-05 15:17 181次 阅读
eBPF是什么以及eBPF能干什么

如何消除表面残余电荷和极化电场?

密度函数理论(DFT)已经发展成为电子结构计算的主要方法,几乎可以研究材料的所有方面及其特性。大多数....
的头像 知社学术圈 发表于 07-05 14:34 144次 阅读
如何消除表面残余电荷和极化电场?

采用Go开发语言实现海量日志收集系统的开发

高可用的分布式key-value存储,可以用于配置共享和服务发现
的头像 C语言专家集中营 发表于 07-05 14:18 104次 阅读
采用Go开发语言实现海量日志收集系统的开发

OTFDEC硬件模块基于STM32H735G-DK板的验证研发

对这种自然的做法,以往的MCU在执行片外加密代码时,需要先调用OSPI驱动,把密文代码读进来,比如放....
的头像 STM32单片机 发表于 07-05 14:03 225次 阅读
OTFDEC硬件模块基于STM32H735G-DK板的验证研发

Zephyr如何在第三方工具链下开启TLS

在Zephyr TLS线程本地存储的实现一文中说明了如何在Zephyr上使用TLS,在这种默认的情况....
的头像 ZephyrProject 发表于 07-05 08:58 152次 阅读
Zephyr如何在第三方工具链下开启TLS

嵌入式开发中C语言源代码的应用优化方案

如果一个函数只在实现它的文件中被使用,把它声明为静态的(static)以强制使用内部连接。否则,默认....
的头像 MCU开发加油站 发表于 07-02 16:42 254次 阅读
嵌入式开发中C语言源代码的应用优化方案

改进VGG模型在苹果外观识别分类中的应用

改进VGG模型在苹果外观识别分类中的应用
发表于 07-02 14:52 20次 阅读
改进VGG模型在苹果外观识别分类中的应用

对于加解密、加签验签你们有概念吗

面对MD5、SHA、DES、AES、RSA等等这些名词你是否有很多问号?这些名词都是什么?还有什么公....
的头像 C语言专家集中营 发表于 07-02 11:44 400次 阅读
对于加解密、加签验签你们有概念吗

剖析FPGA灰度直方图线性拉伸

纯工程师社群 直方图线性拉伸相对于直方图均衡化来说就更好理解一些了,即用线性变化将灰度直方图较窄的部....
的头像 FPGA之家 发表于 07-02 10:37 153次 阅读
剖析FPGA灰度直方图线性拉伸

如何基于DDS IP实现线性调频信号

利用DDS IP实现线性调频信号 1 DDS技术简介随着电子技术的不断发展,传统的频率合成技术逐渐不....
的头像 FPGA之家 发表于 07-02 10:27 192次 阅读
如何基于DDS IP实现线性调频信号

IT行业从0-1了解软件项目的那些事儿

成年人之间的客套,不能信,尤其是IT行业。 最近在忙啥?一起吃个饭? 不了不了,手里还有几个项目呢,....
的头像 C语言专家集中营 发表于 07-02 09:45 203次 阅读
IT行业从0-1了解软件项目的那些事儿

一篇关于CVPR‘21使用RL做点云图像配准

深度强化学习(Deep RL)可以通过序列决策式的方式,在很多方面得到应用。这里我们主要介绍一篇CV....
的头像 ViTEX机器视觉 发表于 07-02 08:57 204次 阅读
一篇关于CVPR‘21使用RL做点云图像配准

关于FPGA的直接扩频通信系统设计

导读 本篇适用于有一定通信基础的大侠,本篇使用的理论不仅仅是扩频通信。为了便于学习,本章将会以实战的....
的头像 FPGA技术江湖 发表于 07-01 10:31 192次 阅读
关于FPGA的直接扩频通信系统设计

想要快速入门Linux入门看这篇就够了

到底要如何Linux入门呢? 因为Linux的知识体系非常的庞大,IT行业很多领域都需要使用到Lin....
的头像 硬件攻城狮 发表于 06-30 16:03 242次 阅读
想要快速入门Linux入门看这篇就够了

单片机固件的应用与驱动分离设计的方式

今天跟大家找了一种常见的应用与驱动分离设计的方式,对于目前一些高性能MCU还是值得使用一下的,不过对....
的头像 硬件攻城狮 发表于 06-30 15:28 215次 阅读
单片机固件的应用与驱动分离设计的方式

复频率与时间函数两者之间的关系解析

复频率现在已是一个广泛熟悉而通用的名词,所以这里仍旧用它。复频率可以方便地表示在一个复平面上,如下图....
的头像 CAE模拟设计支持平台 发表于 06-30 15:27 126次 阅读
复频率与时间函数两者之间的关系解析

全面介绍主调模块,以及GUI模块的编写

摘要:本节主要介绍主调模块,以及GUI模块的编写。 主调模块 终于到了主调模块了,之前的章节主要介绍....
的头像 微波射频网 发表于 06-30 15:23 151次 阅读
全面介绍主调模块,以及GUI模块的编写

一文带你彻底搞懂多线程中各个难点

1.什么是线程? linux内核中是没有线程这个概念的,而是轻量级进程的概念:LWP。一般我们所说的....
的头像 硬件攻城狮 发表于 06-30 15:00 863次 阅读
一文带你彻底搞懂多线程中各个难点

鲲鹏开发套件DevKit助力源代码迁移3大挑战

数字经济时代,市场既需要通用计算算力也需要异构计算算力。以ARM架构为代表的非x86体系架构正以其先....
的头像 华为计算 发表于 06-30 11:08 289次 阅读
鲲鹏开发套件DevKit助力源代码迁移3大挑战

看微软低代码平台如何助力转型?

2021年6月19日,由低码时代、RPA 中国联合主办的「低代码应用与发展论坛」在北京 The Fu....
的头像 广和通FIBOCOM 发表于 06-30 10:12 198次 阅读
看微软低代码平台如何助力转型?

如何通过卡片进行直达教育类专栏分类照片

# 前言 对于教育类应用程序来说,一般都有课程分类,包括我们程序员学习技术,也简单。简单的说,一个程....
的头像 华为麒麟 发表于 06-30 09:43 178次 阅读
如何通过卡片进行直达教育类专栏分类照片

解读12 种 Numpy 和 Pandas 高效函数技巧

本文分享给大家 12 种 Numpy 和 Pandas 函数,这些高效的函数会令数据分析更为容易、便....
的头像 C语言专家集中营 发表于 06-29 17:05 290次 阅读
解读12 种 Numpy 和 Pandas 高效函数技巧

如何利用Python实现快速Ping一个IP网段地址?

ping 命令是我们检查网络中最常用的命令,作为网络人员,基本上每天都会用到,可以很好地帮助我们分析....
的头像 C语言专家集中营 发表于 06-29 15:59 365次 阅读
如何利用Python实现快速Ping一个IP网段地址?

简述C语言中的内存泄漏的原理及解决方法

内存泄漏的原理 只有在堆内存里面才会发生内存泄漏的问题,在栈内存中不会发生内存泄漏。因为栈内存在自动....
的头像 5G网通信 发表于 06-29 14:58 185次 阅读
简述C语言中的内存泄漏的原理及解决方法

基于动态阀值函数的改进小波包遥测信号去噪

基于动态阀值函数的改进小波包遥测信号去噪
发表于 06-29 10:39 30次 阅读
基于动态阀值函数的改进小波包遥测信号去噪

全网最全STM32 HAL的知识总结

ST 为开发者提供了非常方便的开发库:有标准外设库(SPL库)、HAL 库(Hardware Abs....
的头像 5G网通信 发表于 06-28 17:54 482次 阅读
全网最全STM32 HAL的知识总结

探索C语言入门基础之缓冲区

01 — C标准库缓冲区探索 在计算机里缓存是一个很重要的概念,C标准库里大量使用了缓存,最为典型的....
的头像 QNX 发表于 06-28 17:24 184次 阅读
探索C语言入门基础之缓冲区

使用实时操作系统和类型1 Hypervisor设计物联网系统

到现在为止我们已经说明了设计物联网系统的两种可能的方法,实时操作系统的使用和类型1 Hypervis....
的头像 电子设计 发表于 06-28 15:45 364次 阅读
使用实时操作系统和类型1 Hypervisor设计物联网系统

Excel真的可以调用HFSS?

学个Antenna是以天线仿真和调试为主,理论原理为辅的干货天线技术专栏,包括天线入门知识以及各类天....
的头像 微波射频网 发表于 06-28 15:34 218次 阅读
Excel真的可以调用HFSS?