首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

源文件中的代码排序 - 前向声明与"不要重复自己"?

在编程中,源文件中的代码排序是一个重要的问题。代码排序应该遵循一定的规则,以便于阅读和维护。在这个问答中,我们将讨论前向声明和“不要重复自己”的原则。

前向声明

前向声明是指在代码中提前声明函数、变量或类,以便在后续的代码中使用。这种做法有助于提高代码的可读性和可维护性。在许多编程语言中,前向声明是可选的,但在某些情况下,它是必需的。

不要重复自己

“不要重复自己”的原则是指在编写代码时,应该避免重复代码。重复的代码会导致代码的冗余和不必要的维护成本。相反,应该将重复的代码抽象出来,并将其作为函数、类或模块进行重用。这种做法有助于提高代码的可读性和可维护性。

推荐的腾讯云相关产品和产品介绍链接地址

  • 腾讯云云函数:腾讯云云函数是一种事件驱动的计算服务,可以帮助您快速创建、运行和管理应用程序。
  • 腾讯云COS:腾讯云对象存储(COS)是一种存储服务,可以帮助您存储和管理文件。
  • 腾讯云CLB:腾讯云负载均衡(CLB)是一种网络服务,可以帮助您在多个服务器之间分配流量。

这些产品都可以帮助您更好地组织和管理您的代码,以便于阅读和维护。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言头文件j解析

不同语义层次类型定义不要放在一个头文件,不同层次函数声明不要放在一个头文件。...即只有源文件自己使用类型、宏定义和变量、函数声明,不应出现在头文件里。作用域限于单文件私有变量和函数应声明为static,以防止外部调用。...8)头文件若能前置声明(亦称声明[5]),就不要包含另一头文件。仅当前置声明不能满足或过于麻烦时才使用include,如此可减少依赖性方面的问题。...3)用于模块裁减条件编译宏保存在一个独立文件,便于软件裁减。 4)硬件相关代码和操作系统相关代码工程代码相对独立保存,以便于软件移植。 5)按相同功能或相关性组织源文件和头文件。...若函数被声明但未被调用,则编译和运行正常;若声明函数被调用但未被定义,则编译正常但链接报错(undefined reference)。将具体定义放在源文件可部分避免该问题。

2K88
  • C语言头文件组织包含原则

    用户只需按照头文件接口声明来调用库功能,而不必关心接口如何实现。编译器会从库中提取相应代码。 2)头文件能加强类型安全检查。若某个接口实现或使用方式头文件声明不一致,编译器就会指出错误。...不同语义层次类型定义不要放在一个头文件,不同层次函数声明不要放在一个头文件。...8)头文件若能前置声明(亦称声明[5]),就不要包含另一头文件。仅当前置声明不能满足或过于麻烦时才使用include,如此可减少依赖性方面的问题。...3)用于模块裁减条件编译宏保存在一个独立文件,便于软件裁减。 4)硬件相关代码和操作系统相关代码工程代码相对独立保存,以便于软件移植。 5)按相同功能或相关性组织源文件和头文件。...若函数被声明但未被调用,则编译和运行正常;若声明函数被调用但未被定义,则编译正常但链接报错(undefined reference)。将具体定义放在源文件可部分避免该问题。

    5.2K32

    最全面的 Android 编码规范指南

    3.4 类声明 3.4.1 只有一个顶级 类声明每个顶级类都在一个与它同名源文件(当然,还包含.java后缀)。...3.4.2.1 区块划分 建议使用注释将源文件分为明显区块,区块划分如下 常量声明区 UI控件成员变量声明区 普通成员变量声明区 内部接口声明区 初始化相关方法区 事件响应方法区 普通逻辑方法区 重载逻辑方法区...3.4 类声明 3.4.1 只有一个顶级 类声明每个顶级类都在一个与它同名源文件(当然,还包含.java后缀)。...3.4.2.1 区块划分 建议使用注释将源文件分为明显区块,区块划分如下 常量声明区 UI控件成员变量声明区 普通成员变量声明区 内部接口声明区 初始化相关方法区 事件响应方法区 普通逻辑方法区 重载逻辑方法区...4.8.6 注释 4.8.6.1 块注释风格 块注释与其周围代码在同一缩进级别。它们可以是/ … /风格,也可以是// …风格。对于多行/ … /注释,后续行必须从开始, 并且一行对齐。

    1.7K40

    申明定义区别

    C++编码过程,我们经常谈及“定义”和“声明”,二者是编程过程基本概念。我们需要使用一个变量、类型(类、结构体、枚举、共用体)或者函数时,我们需要提前定义和申明。...完成了申明,我们有了使用书籍权限,就可以尽情畅游在知识海洋。如果说书籍是自己委托印刷厂印刷,那么你无需向他人借阅,即无需声明,可以直接使用书籍。...这里书籍指代是“定义”和“声明”作用对象,即变量、类型和函数。C/C++,使用一个变量、类型或者函数必须先在使用完成定义和申明。...c或者.cpp文件); (3)类型定义应该放在头文件,因为类型不具有外部连接性,不同源文件拥有相同类型定义不会报编译错误,但头文件不能重复包含。...这里所说外部连接内部连接区别在于链接器接时候是否将当前目标文件定义与其它目标文件对比,并报告是否有重定义错误。内连接不会进行对比,故不同源文件定义相同名称类型是不会报错

    1.5K20

    Java编程风格

    1.3 特殊字符 1.3.1 空白字符 除了行结束符序列(这里指源码换行),ASCII水平空格字符( 0x20,即 空格 )是源文件唯一允许出现空白字符,这意味着: 所有其它字符串空白字符都要进行转义...源文件结构 一个源文件按顺序包含以下内容: 如有需要,头部要有许可证或版权信息。 package声明语句 import引用语句 仅有一个顶级类 以上每个部分之间必须用一个空行隔开。...2.4 类声明 2.4.1 只有一个顶级类声明 每个顶级类都在一个与它同名源文件。 例外:package-info.java,该文件可没有package-info类。...3.8.2.1 每次只声明一个变量 不允许:不要使用组合声明,比如 int a, b; 允许:应该分开声明,比如 int a; int b; 3.8.2.2 局部变量需要时才声明,并尽快进行初始化 不要在一个代码开头把局部变量一次性都声明了...对于多行 /*…*/ 注释,后续行必须以星号( * )开始, 并且一行星号( * )对齐。以下示例注释都是OK

    2.1K20

    Google Java编程风格规范(2020年4月原版翻译)

    示例格式选择不应该被强制定为规则。 源文件基础 2.1 文件名 源文件以其最顶层类名来命名,大小写敏感,文件扩展名为.java。 2.2 文件编码:UTF-8 源文件编码格式为UTF-8。...3.3.4 不要使用类静态导入 静态导入不要用于静态嵌套类,它们是通过正常导入导入。 3.4 类声明 3.4.1 只有一个顶级类声明 每个顶级类都在一个与它同名源文件。...4.8.2 变量声明 4.8.2.1 每次只声明一个变量 不要使用组合声明,比如int a, b;。...4.8.2.2 需要时才声明,并尽快进行初始化 不要在一个代码开头把局部变量一次性都声明了(这是c语言做法),而是在第一次需要使用它时才声明。...*/注释,后续行必须从*开始, 并且一行*对齐。以下示例注释都是OK

    1.1K20

    python

    13.类朋友(朋友成员,友元) 在类,用friend关键字可以将一个全局函数声明为该类“朋友”,也可以将另一个类声明为该类“朋友”。...使用枚举可以减少代码bug。 例如,我们为果汁店设计一个程序,它将限制果汁为小杯、杯、大杯。这就意味着它不允许顾客点除了这三种尺寸外果汁。...源文件声明规则 当在一个源文件定义多个类,并且还有import语句和package语句时,要特别注意这些规则。...例如:源文件public类类名是Employee,那么源文件应该命名为Employee.java。 如果一个类定义在某个包,那么package语句应该在源文件首行。...import语句和package语句对源文件定义所有类都有效。在同一源文件,不能给不同类不同声明。 类有若干种访问级别,并且类也分不同类型:抽象类和final类等。

    87030

    Google 出品 Java 编码规范,强烈推荐,权威又科学!

    3.4 类声明 3.4.1 只有一个顶级类声明 每个顶级类都在一个与它同名源文件(当然,还包含 .java后缀)。...不同类对成员排序可能是不同。最重要一点,每个类应该以某种逻辑去排序成员,维护者应该要能解释这种排序逻辑。...4.8.2 变量声明 4.8.2.1 每次只声明一个变量 不要使用组合声明,比如 inta,b;。...4.8.2.2 需要时才声明,并尽快进行初始化 不要在一个代码开头把局部变量一次性都声明了(这是c语言做法),而是在第一次需要使用它时才声明。...*/注释,后续行必须从 *开始, 并且一行 *对齐。以下示例注释都是OK

    2.7K40

    googljava、c++编程风格

    3.4 类声明    3.4.1 只有一个顶级类声明 每个顶级类都在一个与它同名源文件(当然,还包含.java后缀)。...不同类对成员排序可能是不同 。 最重要一点,每个类应该以某种逻辑去排序成员,维护者应该要能解释这种排序逻辑。...如果在非赋值运算符处断开,那么在该符号断开(比如+,它将位于下一行)。注意:这一点Google其 它语言编程风格不同(如C++和JavaScript)。...4.8.2.2 需要时才声明,并尽快进行初始化 不要在一个代码开头把局部变量一次性都声明了(这是c语言做法),而是在第一次需要使用它时才声 明。...*/注释,后续行必须从*开始, 并且一行*对齐。以下示例注释都是OK。 /* *Thisis //Andso /*Oryoucan *okay. //isthis.

    1K20

    真刀真枪模块化(2)——图解Service模型

    在模块化过程,要想发挥模块化“复用已有代码”、“降低开发时间”作用,就必须将模块视作黑盒子;一旦模块被视作黑盒子,实现质量和后续可靠维护就成为当前模块是否可用基石——进一步来说,不靠谱代码实现和差强人意接口设计封装是导致模块化失败根本原因...首先,每一个模块都有一个属于自己专门文件夹,文件夹名称模块名相同: ?...实际操作,类型定义、宏定义、函数和全局变量声明都应该首先放置在对应代码(或是后面会提到模块内私有的接口头文件);当且仅当我们发现用户要使用模块某一功能必须要用到某一信息时,才“极不情愿”地...作为模块用户,不要修改这里任何内容 /* 模块接口头文件防重复包含保护宏 */ /* 请将 XXXXXX 替换为模块名称,并删除本注释 */ #ifndef __XXXXXX_H__ #define...、模块同名接口头文件;且这里包含信息对用户来说都是可用(没有无用信息,也没有多余信息); 对模块开发者来说: 这一模型是高度遵守黑盒子原则; 用户使用模块,是不需要“用脏手染指”自己宝贵代码

    42520

    【linux命令讲解大全】017.格式化C语言源文件工具:indent命令

    格式化C语言源文件 补充说明 indent命令 可辨识C原始代码文件,并加以格式化,以方便程序员阅读、修改等操作。...:在声明,如果出现逗号就换行; -bl:if(或是else、for等)后面执行区段“{”不同行,且“}”自成一行 -bli:设置{}缩排格数; -br:if(或是else、for等...-kr:指定使用Kernighan&Ritchie格式; -lp:叙述过长而换行,且叙述包含了括号时,将括号每行起始栏位内容垂直对其排列; -nbad:在声明区段后不要加上空白行; -nbap...case后面空一格; -nfc1:不要格式化放在每行最前端注释; -nfca:不用格式化任何注释; -nip:参数不要缩排; -nlp:叙述过长而换行,且叙述包含了括号时,不用将括号每行起始栏位垂直对其排列...; -npcs:在调用函数名之后,不要添加空格; -npro:不要读取indent配置文件“.indent.pro”; -npsl:程序类型程序名称放在同一行; -nsc:注释左侧不要添加星号; -

    9410

    狂野 #imports: 如何驯服文件依赖关系

    当你在一个项目中工作时,这并不是什么大问题,但当你开始一个新项目并想重复使用一些源文件时,这就会立刻带来麻烦。 但是,.h 文件不必要 #imports 会更糟糕:问题会呈指数级增长!...这样我就可以对它们进行排序,进而帮助我找到任何重复声明。此外,每行一个声明还能显示有多少个声明。...这也是为什么我把协议声明放在自己头文件,而不是与它们合作类放在一起。这样可以保持依赖关系图简洁。...代码气味: .m #imports 数量过多 前置声明在实现文件并不常见,因为我们通常是对象发送信息,而不仅仅是传递对象。...我要去检查我自己代码,因为我知道我有遗漏地方。让我们来驯服那些疯狂文件依赖关系!

    17010

    Java编程规范-文件组织排版

    3一个文件只定义一个类 为方便程序阅读代码维护,一个源文件只定义一个类,内部类不受此限制。...; 3、如果右大括号是一个语句、函数体或类终止,则在右大括号后换行,否则不换行; 4、如果大括号没有语句,且右大括号后也没有语句时,则右大括号不换行,左大括号处于同一行; 示例: 【正确用法...120 个字节,超长代码应该换行; 2、如果换行,应该遵循如下原则: 在逗号 ‘,’ 后换行; 在较低优先级操作符换行,操作符位于新行之首; 采用适当缩进保证代码清晰易读; 方法调用点符号下文一起换行...除外; 5、参数列表逗号 ‘,’ 后面; 6、for 循环中表达式之间,分号 ‘;’ 后面; 7、foreach 循环中冒号 ‘:’ 前后; 8、方法名 ( 包括声明和调用 ) 和左括号...11、多行注释,换行后星号 ‘’ 之前至少放置一个空格,为实现首行注释星号 '’ 对齐; 12、注释星号 ‘*’ 注释内容 如果处于同一行,两者 之间放置一个空格; 13、注释双斜线注释内容之间有且仅有一个空格

    62930

    Linux学习-基本指令

    ,也就是/dev下各种设备文件 5 是指文件格式,比如passwd, 就会说明这个文件各个字段含义 6 是给游戏留,由各个游戏自己定义 7 是附件还有一些变量,比如environ这种全局变量在这里就有说明...,源文件或目录参数可以有多个, mv命令将各参数指定源文件均移至目标目录 常用选项: -f : force 强制意思,如果目标文件已经存在,不会询问而直接覆盖 -i : 若目标文件 (destination...输出重定向) -n 不要在最后自动换行 -e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般 文字输出: \a 发出警告声 \b 删除一个字符 \c 最后不加上换行符号...字符串:向上搜索“字符串”功能 n:重复一个搜索( / 或 ? 有关) N:反向重复一个搜索( / 或 ?...不要再加参数!

    95830

    js面试知识点笔记

    ES6新语法,说出它们和ES5区别 const 是一个常量只允许声明一次不可修改(和let有快级作用域) let不存在变量提升机制(变量不允许在声明之前使用) let不允许重复声明 在全局作用域中基于...这种变量一层层向上查找机制就是“作用域链机制” 原型链 它也是一种查找机制,实例首先在自己私有属性中进行属性查找,如果不是私有属性,基于__proto__ 所属类原型上进行查找,如果在找不到...常用算法 递归 去重 冒泡排序 插入排序 快速排序 时间复杂度 空间复杂度 KMP … 递归:函数自己调用自己执行就是递归 (递归是基于条件判断:因为我们不能形成死递归,在某个条件下我们需要结束递归操作...1.并排排列三列,三列没有具体高度,靠内容撑开 2.通过API接口地址,基于AJAX,从服务器端获取数据,拿出数据三项依次插入到三列(数据绑定) 3.计算目前三列高度,按照高度由小到大把三列进行排序...6.把准备内容响应给客户端(如果请求是HTML或者CSS等这样源文件,服务器返回是资源文件代码[不是文件本身]) 【浏览器渲染阶段】 7.客户端浏览器接受到服务器返回代码,基于自己内部渲染引擎

    98620

    Google C++编程风格指南(一)之头文件相关规范

    使用头文件时,我们应该遵守如下几个规范: (1)防止头文件在源文件多次被包含; (2)尽量减少头文件相互依赖; (3)合理头文件包含顺序以及名称。...当从另一个项目中头文件移植到自己项目中时,若想通过编译,发现这个头文件需要另外一个头文件,另外一个又需要其它头文件…,让人头痛啊。这就是头文件依赖带来不便。...2.2.1前置声明(forward declarations) 使用前置声明(forward declarations)可尽量减少头文件#include数量,也就是能依赖声明不要要依赖定义。...举例说明:头文件中用到类File,但不需要访问File声明,则头文件叧需前置声明class File;无需#include "file/base/file.h"。...然而,返样做法会降低代码可读性及执行效率。如果仅仅为了少包含头文件,还是不要这样替代。

    2.9K10

    预处理指令、typedef、条件编译、多文件代码

    预处理指令 源代码,以井号#开头并不是C语言中语句。它们属于预处理指令。 在代码被编译,预处理器会先处理预处理指令,并根据预处理指令意义修改C语言源码。...最后,为了保证不要在一个表达式对同一个变量多次进行自增、自减操作。若宏函数替换体内在一个表达式多次使用同一个参数,那么请不要在宏函数参数内填自增、自减表达式。...所以,我们将Person结构类型定义符号常量NAME_LENGTH,在文件person.h也写了一遍。 为什么没有重定义报错 代码中出现了重复声明或定义,构建时为什么不会出现重定义报错呢?...这是因为,重复代码出现在不同文件。 我们知道作用域分为两种: 块作用域:定义或声明代码块内。 文件作用域:定义或声明代码块外。 这里定义或声明均在函数外。那么它们作用域都是文件作用域。...虽然,文件person.h函数声明没有必要出现在文件person.c,但是,这样做并不碍事。 多文件代码小结 源文件person.c: 函数定义。

    1.1K40
    领券