C语言——程序的版式

前言

  • 版式虽然不会影响程序的功能,但会影响可读性。程序的版式追求清晰、美观,是程序风格的重要构成因素
  • 可以把程序的版式比喻为“书法”。好的“书法”可让人对程序一目了然,看得兴致勃勃。差的程序“书法”如螃蟹爬行,让人看得索然无味,更令维护者烦恼有加。请程序员们学习程序的“书法”,弥补大学计算机教育的漏洞,实在很有必要
  • 接下来让我开始学习吧!

1. 空行

  • 空行起着分隔程序段落的作用。空行得体(不过多也不过少)将使程序的布局更加清晰。空行不会浪费内存,虽然打印含有空行的程序是会多消耗一些纸张,但是值得。所以不要舍不得用空行。

规则1-1:

  • 在每个类声明之后、每个函数定义结束之后都要加空行。参见示例2-1(a)

规则1-2:

  • 在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。参见示例 2-1(b )

在这里插入图片描述

2. 代码行

规则2-1:

  • 一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且方便于写注释

规则2-2:

  • if、for、while、do 等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加{}。这样可以防止书写失误。

在这里插入图片描述

建议2-1:

  • 尽可能在定义变量的同时初始化该变量(就近原则)
  • 因为如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记。如果引用了未被初始化的变量,可能会导致程序错误。本建议可以减少隐患。例如
int width = 10; // 定义并初绐化 width 
int height = 10; // 定义并初绐化 height 
int depth = 10; // 定义并初绐化 depth
int arr[10] = { 0 };//定义并初始化数组arr
int arr[n];//这里的变长数组是特例
  • 变长数组的概念可以参考这个——C99变长数组

3. 代码行内的空格

规则3-1:

  • 关键字之后要留空格。像 const、virtual、inline、case 等关键字之后至少要留一个空格,否则无法辨析关键字。像 if、for、while 等关键字之后应留一个空格再跟左括号‘(’,以突出关键字

规则3-2:

  • 函数名之后不要留空格,紧跟左括号‘( ’,以与关键字区别

规则3-3:

  • ‘( ’向后紧跟,‘ )’、‘ ,’、‘ ; ’向前紧跟,紧跟处不留空格

规则3-4:

  • ‘ ,’之后要留空格,如 Function(x, y, z)。如果‘;’不是一行的结束符号,其后要留空格,如 for (initialization; condition; update)

规则3-5:

  • 赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“ = ”、“ += ” “ >= ”、“ <= ”、“ + ”、“ * ”、“ % ”、“ && ”、“ || ”、“ << ”,“ ^ ”等二元操作符的前后应当加空格。

规则3-6:

  • 一元操作符如“ ! ”、“ ~ ”、“ ++ ”、“ - - ”、“ & ”(地址运算符)等前后不加空格

规则3-7:

  • 像“[]” 、“ . ”、“ -> ”这类操作符前后不加空格

建议3-1:

  • 对于表达式比较长的 for 语句和 if 语句,为了紧凑起见可以适当地去掉一些空格,如 for (i=0; i<10; i++)和 if ((a<=b) && (c<=d))
  • 光用文字表述比较抽象,请见下图:

在这里插入图片描述

4. 对齐

规则4-1:

  • 程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。

规则4-2:

  • { }之内的代码块在‘{’右边数格处左对齐。

在这里插入图片描述

5. 长行拆分

规则5-1:

  • 代码行最大长度宜控制在 70 至 80 个字符以内。代码行不要过长,否则眼睛看不过来,也不便于打印。

规则5-2:

  • 长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。

在这里插入图片描述

6. 修饰符的位置

  • 修饰符 * 和 & 应该靠近数据类型还是该靠近变量名,是个有争议的活题。
  • 若将修饰符 * 靠近数据类型,例如:int* x; 从语义上讲此写法比较直观,即 x是 int 类型的指针。
  • 上述写法的弊端是容易引起误解,例如:int* x, y; 此处 y 容易被误解为指针变量。虽然将 x 和 y 分行定义可以避免误解,但并不是人人都愿意这样做

规则6-1:

  • 应当将修饰符 * 和 & 紧靠变量名
char *name;
int *x, y; // 此处 y 不会被误解为指针 

7. 注释

  • C 语言的注释符为“//”。C++语言中,程序块的注释常采用“//”,行注释一般采用“//…”。注释通常用于:
  1. 版本、版权声明;
  2. 函数接口说明;
  3. 重要的代码行或段落提示

规则7-1:

  • 注释是对代码的“提示”,而不是文档。程序中的注释不可喧宾夺主,注释太多了会让人眼花缭乱。注释的花样要少

规则7-2:

  • 如果代码本来就是清楚的,则不必加注释。否则多此一举,令人厌烦。例如
i++; // i 加 1,多余的注释

规则7-3:

  • 边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。

规则7-4:

  • 注释应当准确、易懂,防止注释有二义性。错误的注释不但无益反而有害

规则7-5:

  • 尽量避免在注释中使用缩写,特别是不常用缩写。

规则7-6:

  • 注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放在下方

规则7-7:

  • 当代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注释,便于阅读

在这里插入图片描述

  • 以上就是代码在编写过程中要注意的事项了
  • 恭喜你,今天又遥遥领先了别人!

在这里插入图片描述

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

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

相关文章

JOSEF约瑟 时间继电器DS-112 220VDC 0.2~3.5S 柜内固定安装,板前接线

系列型号&#xff1a; DS-111时间继电器&#xff1b;DS-112时间继电器&#xff1b; DS-113时间继电器&#xff1b;DS-111C时间继电器&#xff1b; DS-112C时间继电器&#xff1b;DS-113C时间继电器&#xff1b; DS-114时间继电器&#xff1b;DS-115时间继电器&#xff1b; DS-1…

postgresql安装

一、官方找到对应的版本,下载 官方下载地址(rpm方式安装):PostgreSQL: Linux downloads (Red Hat family) PostgreSQL: The worlds most advanced open source database 滑到最下面

深度学习记录--mini-batch gradient descent

batch vs mini-batch gradient descent batch&#xff1a;段&#xff0c;块 与传统的batch梯度下降不同&#xff0c;mini-batch gradient descent将数据分成多个子集&#xff0c;分别进行处理&#xff0c;在数据量非常巨大的情况下&#xff0c;这样处理可以及时进行梯度下降&…

爬虫之牛刀小试(八):爬取微博评论

今天爬取的是微博评论。 可以发现其特点是下一页评论的max_id在上一页中。 于是代码如下&#xff1a; import requests import json import re import time headers {User-Agent: ,"Cookie": "","Referer": "https://m.weibo.cn/detail/4…

iphone5s基带部分电源部分主主电源供电及

时序: 1.,基带电源的供电&#xff0c;基带电源也叫pmu。 首先时序图说电池提供供电&#xff0c;电池是J6接口&#xff0c;视频习惯把接口称之为座子。查U2_RF芯片&#xff0c;发现供电信号为PP_BATT_VCC_CONN&#xff0c;但是没查到跟电池座子有关系&#xff0c;电池座子写的是…

TCP 的三次握手和四次挥手

Java 面试题 TCP 三次握手 第一次握手&#xff1a;客户端向服务端发送SYN包。报文中标志位SYN1&#xff0c;序列号seqx&#xff08;x为随机整数&#xff09;。此时客户端进入了 SYN_SEND 同步已发送状态。 第二次握手&#xff1a;服务端回复客户端SYNACK包。报文中标志位SYN1&…

洛谷P5731 【深基5.习6】蛇形方阵(C语言)

思路感觉还是比较好想的。 从 1 到 n 依次算。先往右&#xff0c;走到头往下&#xff0c;再走到头往左&#xff0c;以此类推。 #include<stdio.h>int main() {int n, i, j, k1,t0;scanf("%d", &n);int a[100][100];if (n % 2 0)t n / 2;elset n / 2 …

网络安全需要对网络风险有独特的理解

迷失在翻译中&#xff1a;网络风险解释的脱节现实 在古印度的一个经典故事中&#xff0c;几个蒙住眼睛的人接近一头大象&#xff0c;每个人检查不同的部位。有人触摸树干&#xff0c;认为它像一条蛇。另一个摸到了一条腿&#xff0c;认为它是一棵树。还有一个拿着象牙的人&…

Redis: Redis介绍

文章目录 一、redis介绍二、通用的命令三、数据结构1、字符串类型&#xff08;String&#xff09;&#xff08;1&#xff09;介绍&#xff08;2&#xff09;常用命令&#xff08;3&#xff09;数据结构 2、列表&#xff08;List&#xff09;&#xff08;1&#xff09;介绍&…

GCC 内联汇编

LINUX下的汇编入门 AT&T风格 汇编 和GCC风格汇编 汇编代码的调试 前面写了三篇,是自我摸索三篇,摸着石头过河,有些或许是错误的细节,不必在意! 今天我们直接用GCC编译C语言代码,且在C语言里面内嵌AT&T风格的汇编! 前三篇大家了解即可,我们重点放在内嵌汇编里,简单快…

【计算机网络】2、传输介质、通信方向、通信方式、交换方式、IP地址表示、子网划分

文章目录 传输介质双绞线无屏蔽双绞线UTP屏蔽双绞线STP 网线光纤多模光纤MMF单模光纤SMF 无线信道无线电波红外光波 通信方向单工半双工全双工 通信方式异步传输同步传输串行传输并行传输 交换方式电路交换报文交换分组交换 IP地址表示IP地址的定义IP地址的分类无分类编址特殊I…

LeeCode 42. 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1]…