C语言 函数——代码风格

目录

基本的代码规范

程序版式

对齐(Alignment)与缩进(indent)

变量的对齐规则

空行——分隔程序段落的作用

代码行内的空格——增强单行清晰度

代码行

长行拆分

标识符命名规则

标识符命名的共性规则

windows应用程序命名规则

灵活运用的命名规则

简化的windows应用程序命名规则

注释规范

不好的注释

好的注释

在哪些地方写注释?


基本的代码规范

Basic rules and guidelines of Coding Style

*程序版式

*程序注释

*命名规则

追求

*清晰、整洁、美观、一目了然

*容易阅读,容易测试程序版式

程序版式

对齐(Alignment)与缩进(indent)

——保证代码整洁、层次清晰的主要手段

*位于同一层{和}之内的代码在{右边数格处左对齐

*同层次的代码在同层次的缩进层上

  *现在的许多开发环境、编辑软件都支持“自动缩进”

  *VC中有自动整理格式功能(ALT+F8)

*一般用设置为4个空格的Tab键缩进,不用空格缩进

变量的对齐规则

*数据类型+n个TAB+变量名+[n个TAB]+=+[初始化值];

*例

        char name[20];

        char addr[30];

        char sex="F";

        int age=20;

        float score=90;

空行——分隔程序段落的作用

*在每个函数定义结束之后加空行

*在一个函数体内,相邻两组逻辑上密切相关的语句块之间加空行,语句块内不加空行

代码行内的空格——增强单行清晰度

*关键字之后加空格,但函数名之后不加空格

*赋值、算术、关系、逻辑等二元运算符前后各加一空格

*但一元运算符以及[ ]    .    -   >前后不加空格

        sum = sum + term;

*(向后紧跟,) , ; 向前紧跟,紧跟处不留空格,,;后留一个空格

        Function(x, y, z)

        for (initialization; condition; update)

*对表达式较长的for和if语句,为了紧凑可在适当地方去掉一些空格

        for (i=0; i<10; i++)

        if ((a+b>c) && (b+c>a) && (c+a>b))

代码行

一行只写一条语句,便于测试

一行只写一个变量,便于写注释

        int width;        //宽度

        int height;        //高度

        int depth;        //深度

        int width,height,depth;        //宽度高度深度(不建议)

尽可能在定义变量的同时,初始化该变量

        int sum = 0;

if、for、while、do等语句各占一行,便于测试和维护

        if (width < height)

        {

                DoSomething();//执行语句无论有几条都用{和}将其包含在内

        }

长行拆分

代码行不宜过长,应控制在10个单词或70~80个字符以内

        Studies show that up to ten-word text widths are optimal for eye tracking

实在太长时要在适当位置拆分,拆分出的新行要进行适当缩进

        if ((veryLongVarl >= veryLongVar2)

                &&(veryLongVar3 >= veryLongVar4))

        {

                DoSomething();

        }

        double FunctionName(double variablename1,

                                             double variablename2);

        for (very_longer_initialization;

              very_longer_condition;

              very_longer_update)

        {

                DoSomething();

        }

标识符命名规则

按照执行级别分为:

*共性规则——必须执行

*简化规则——建议采用

*可选规则——灵活运用

标识符命名的共性规则

有意义,直观可拼读,见名知意,不必解码

最好采用英文单词或其组合,切忌用汉语拼音,尽量避免出现数字编号

不要出现仅靠大小写区分的相似的标识符

不要出现名字完全相同的局部变量和全局变量

用正确的反义词命名具有互斥意义的变量或相反动作的函数

*int minValue;

*int maxValue;

*int GetValue(...);

*int SetValue(...);

尽量与所采用的操作系统或开发工具的风格保存一致

*在Linux/Unix平台

        习惯用“小写加下划线”

        function_name

        variable_Name

*Windows风格

        大小写混排的单词组合而成

        FunctionName

        variableName

windows应用程序命名规则

Microsoft公司的Hungarian Notation

主要思想

        在变量和函数名前加上前缀,用于表示变量的数据类型

        【限定范围的前缀】+【数据类型前缀】+【有意义的英文单词】

        限定范围的前缀

                静态变量前加前缀s_ , 表示static

                全局变量前加前缀g_,表示global

                默认情况为局部变量

        数据类型前缀

        ch 字符变量前缀

        i    整形变量前缀

        f    实型变量前缀

        p    指针变量前缀

灵活运用的命名规则

限定范围的前缀与数据类型前缀可要可不要

无特殊意义的循环变量可以直接定义成i,j,k等单词变量

        int i, j, k;

        float x, y, z;

     *若采用匈牙利命名规则,则应写成

        int iI,iJ,iK;     //前缀i表示int类型

        float fx,fy,fz; //前缀f表示float类型

简化的windows应用程序命名规则

变量名形式

*小写字母开头,“名词”或者“形容词+名词”

        oldValue,newValue

函数名形式

*大写字母开头,“动词”或者“动词+名词”(动宾词组)

        GetValue(),SetValue()

宏和const常量全用大写字母,并用下划线分隔单词

        #define ARRAY_LEN 10

        const int MAX_LEN=100;

注释规范

写注释给谁看?

*给自己看,使字节的设计思路得以连贯

*给继任者看,使其能接替自己的工作

写注释的最重要的共性在于传承

*要站在继任者的角度写

*简单明了、准确易懂、防止二义性

*让继任者可以轻松阅读、复用、修改自己的代码

*让继任者轻松辨别出哪些使字节写的,哪些是被人写的

不好的注释

好的注释

在哪些地方写注释?

在重要的文件首部

        文件名+功能说明+【作者】+【版本】+【版权声明】+【日期】

在用户自定义函数前,对函数接口进行说明

        函数功能+入口参数+出口参数+返回值(包括出错处理)

在一些重要的语句上方

        对代码的功能、原理进行解释说明

在一些重要的语句行右方

        定义一些非通用的变量,函数调用,较长的、多重嵌套的语句块结束处

*在修改的代码行旁边加注释

*在调试程序中对暂不使用的语句通常可先用注释符括起来,使编译器跳过这些语句

可灵活运用的一些规则

*注释可长可短,但应画龙点睛,重点加载语义转折处

*简单的函数可以用一句话简单说明

        //两数交换

        void Swap(int *x, int *y)

*内部使用的函数可以简单注释,供被人使用的函数必须严格注释,特别是入口参数和出口参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/625771.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

发人深省:如果前端开发是青春饭,为何你的青春这么匆匆。

有很多人说前端开发是青春饭&#xff0c;干不了多久&#xff0c;很容易被取代&#xff0c;这就是危言耸听了。只要前端岗位在一天&#xff0c;这就不是青春饭&#xff1b;即便被取代&#xff0c;资深前端很快就会在别的地方找到自己立身之本&#xff0c; 反观哪些天天抱怨&…

【Excel2LaTeX】复杂表格制作的解决方案

刚开始用LaTeX写论文&#xff0c;遇到的第一道坎就是绘制表格&#xff0c;较小的普通表格可以通过简单的语法实现&#xff0c;但是较大的复杂的表格却让我无从下手。 Excel2LaTeX插件 这里介绍一种我用到非常顺手的工具&#xff1a;Excel2LaTeX插件&#xff0c;下载地址&#x…

C语言:文件操作(四)

目录 前言 6、文本文件和二进制文件 7、文件读取结束的判定 7.1 被错误使用的feof 8、文件缓冲区 总结 前言 接上篇&#xff0c;本篇要讲解的是文本文件和二进制文件的内容、文件读取结束的判定以及文件缓冲区。 6、文本文件和二进制文件 根据数据的组织形式&#xff0c;数…

嵌入式工程师如何摸鱼?

有老铁问我&#xff0c;做嵌入式开发要加班吗&#xff1f; 也不知道搞什么鬼&#xff0c;现在的年轻人对加班这么抵触。 我刚做开发那会&#xff0c;啥也不懂&#xff0c;每天基本都要加班到晚上7-9点不等&#xff0c;我并不抵触加班&#xff0c;因为早早回家&#xff0c;也没什…

HarmonyOS开发实战:【亲子拼图游戏】

概述 本篇Codelab是基于TS扩展的声明式开发范式编程语言编写的一个分布式益智拼图游戏&#xff0c;可以两台设备同时开启一局拼图游戏&#xff0c;每次点击九宫格内的图片&#xff0c;都会同步更新两台设备的图片位置。效果图如下&#xff1a; 说明&#xff1a; 本示例涉及使…

搜狗多线程长尾词挖掘软件-【批量挖掘搜狗大家还在搜和相关搜索长尾词】

搜狗多线程长尾词挖掘软件-【批量挖掘搜狗大家还在搜和相关搜索长尾词】介绍&#xff1a; 1、软件根据放入多个关键词批量多线程去搜狗搜索里拓搜狗大家还在搜和相关搜索。 2、搜狗大家还在搜和相关搜索长尾词质量好。 3、一个关键词可以拓19个高质量相关长尾词。 4、软件自…

msyql中SQL 错误 [1118] [42000]: Row size too large (> 8126)

场景&#xff1a; CREATE TABLE test-qd.eqtree (INSERT INTO test.eqtree (idocid VARCHAR(50) NULL,sfcode VARCHAR(50) NULL,sfname VARCHAR(50) NULL,sfengname VARCHAR(50) NULL,…… ) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_general_ci;或 alter table eqtre…

【Java】jdk1.8 Java代理模式,Jdk动态代理讲解(非常详细,附带class文件)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 一、什么是代理模式 想要学代理模式&#xff0c;我们就要先弄清一个概念“什么是代理”&#xff1f; 在我们的现实生活中&#xff0c;你或许不少听过关于代理的名词&#xff0c;如&#xff1a;代理商。那什么又叫做代理…

安装SSMS出现错误和SSMS连接数据库失败

目录 1.点击图片下安装的时候&#xff0c;出现0x80070643错误 解决办法&#xff1a; 1,如果是是第一次安装的话&#xff0c;重新启动电脑&#xff0c;把原来下载的SSMS删除掉&#xff0c;在重新下载安装 2.如果是原来就下载过&#xff0c;先重启一下&#xff0c;如果还不可以就…

MySQL 基础使用

文章目录 一、Navicat 工具链接 Mysql二、数据库的使用1.常用数据类型2. 建表 create3. 删表 drop4. insert 插入数据5. select 查询数据6. update 修改数据7. delete 删除记录truncate table 删除数据 三、字段约束字段1. 主键 自增delete和truncate自增长字段的影响 2. 非空…

Java——代码块

目录 一.代码块概念以及分类 二.普通代码块 三.构造代码块 四.静态代码块 一.代码块概念以及分类 使用 {} 定义的一段代码称为代码块。根据代码块定义的位置以及关键字&#xff0c;又可分为以下四种&#xff1a; 普通代码块构造块静态块同步代码块&#xff08;后续讲解多…

ChatGPT 可以预测未来吗?

推荐 4月13日的一篇有趣的 paper&#xff0c;特来分享。 &#x1f449; 当前的大型语言模型&#xff08;LLMs&#xff09;具有强大的数据合成和推理能力&#xff0c;但它们在直接预测尚未发生事件的准确性上常常受到限制。传统的预测方法依赖于直接询问模型关于未来的问题。 …