首页
学习
活动
专区
工具
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.3K32

    最全面的 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.6K20

    【C语言】深入解析C语言结构体:定义、声明与高级应用实践

    结构体定义和声明:放置策略总结 场景 放置建议 优势 结构体简单,多个模块共享 头文件中完整定义 易于使用和维护 结构体复杂,需隐藏细节 头文件声明,源文件定义 增强封装性 包含嵌套结构体、数组或动态分配内存...typedef struct { int id; char name[50]; } Student; 声明:只声明结构体的类型名或前向声明。...struct Student; // 前向声明,无具体成员 1.2 放置位置的基本规则 如果结构体被多个模块共享,应放在头文件中。 如果结构体仅在某模块内使用,应放在源文件中。 2....2.2 隐藏实现细节的结构体 如果结构体只用于某个模块,或者需要隐藏其具体实现细节,可以在头文件中声明,在源文件中定义。...隐藏实现细节:头文件仅暴露函数接口,结构体的定义隐藏在源文件中。

    40410

    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

    python

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

    87430

    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

    googl中java、c++编程风格

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

    1K20

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

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

    2.8K40

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

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

    44020

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

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

    18210

    【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:注释左侧不要添加星号; -

    10310

    js面试知识点笔记

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

    98820

    Linux学习-基本指令

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

    96830

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

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

    3K10

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

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

    1.1K40
    领券