C 语言编程 — 代码规范
2020-04-05 11:42 云物互联 阅读(257) 评论(0) 编辑 收藏 举报目录
前文列表
《程序编译流程与 GCC 编译器》
《C 语言编程 — 基本语法》
《C 语言编程 — 基本数据类型》
《C 语言编程 — 变量与常量》
《C 语言编程 — 运算符》
《C 语言编程 — 逻辑控制语句》
《C 语言编程 — 函数》
《C 语言编程 — 高级数据类型 — 指针》
《C 语言编程 — 高级数据类型 — 数组》
《C 语言编程 — 高级数据类型 — 字符串》
《C 语言编程 — 高级数据类型 — 枚举》
《C 语言编程 — 高级数据类型 — 结构体与位域》
《C 语言编程 — 高级数据类型 — 共用体》
《C 语言编程 — 高级数据类型 — void 类型》
《C 语言编程 — 数据类型的别名》
《C 语言编程 — 数据类型转换》
《C 语言编程 — 宏定义与预处理器指令》
《C 语言编程 — 异常处理》
《C 语言编程 — 头文件》
《C 语言编程 — 输入/输出与文件操作》
《C 语言编程 — 堆栈与内存管理》
《C 语言编程 — 指令行参数》
《C 语言编程 — GDB 调试工具》
空行
空行起着分隔程序段落的作用,空行得体将使程序的布局更加清晰,更具可读性。
- 定义变量后要空行。尽可能在定义变量的同时初始化变量,即遵循就近原则。如果变量的引用和定义相隔比较远,那么变量的初始化就很容易被忘记。若引用了未被初始化的变量,就会导致程序出错。
- 每个函数定义结束之后都要加空行。
- 两个相对独立的程序块必须要加空行。
空格
- 关键字之后要留空格。像 const、case 等关键字之后至少要留一个空格,否则无法辨析关键字。像 if、for、while 等关键字之后应留一个空格再跟左括号
(
,以突出关键字。 - 函数名之后不要留空格,应紧跟左括号
(
,与关键字进行区别。 ,
之后要留空格。- 如果
;
不是一行的结束符号,其后要留空格。 - 赋值运算符、关系运算符、算术运算符、逻辑运算符、位运算符,e.g. 如
=、==、!=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=、|=、>、<=、>、>=、+、-、*、/、%、&、|、&&、||、<<、>>、^
等**双目运算符(两端有操作数)**的前后要加空格。 - 单目运算符(只有一端有操作数),e.g.
!、~、++、--、-、*、&
等前后不加空格。
注意:规则 6 中的-
是负号运算符、*
是指针运算符、&
是取地址运算符。 - 数组符号
[]
、结构体成员访问运算符.
、指向结构体成员运算符->
,这类操作符前后不加空格。 - 对于表达式比较长的 for 语句和 if 语句,其表达式可以适当的删除一些空格,例如:
for (i=0; i<10; i++){}
。
缩进
缩进是通过键盘上的 Tab 键实现的,缩进可以使程序更有层次感。原则是:如果地位相等,则不需要缩进;如果属于某一个代码的内部代码就需要缩进。
对齐
对齐主要是针对大括号 {}
说的,这里是风格纠纷的重灾区,有换行派、有不换行派,具体看项目的整体约定。
{
和}
分别都要独占一行。互为一对的{
和}
要位于同一列,并且与引用它们的语句左对齐。{}
之内的代码要向内缩进一个 Tab,且同一地位的要左对齐,地位不同的继续缩进。
#include <stdio.h>
int main(void)
{
if (…) {}
return 0;
}
代码行
- 一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且便于写注释。
- if、else、for、while、do 等语句自占一行,执行语句不得紧跟其后。此外,非常重要的一点是,不论执行语句有多少行,就算只有一行也要加
{}
,并且遵循对齐的原则,这样可以防止书写失误。
注释
注释通常用于重要的代码行或段落提示。在一般情况下,源程序有效注释量必须在 20% 以上。虽然注释有助于理解代码,但注意不可过多地使用注释。
- 注释是对代码的 “提示”,而不是文档。程序中的注释不可喧宾夺主,注释太多会让人眼花缭乱。
- 如果代码本来就是清楚的,则不必加注释。
- 边写代码边注释,修改代码的同时要修改相应的注释,以保证注释与代码的一致性,不再有用的注释要删除。
- 当代码比较长,特别是有多重嵌套的时候,应当在段落的结束处加注释,这样便于阅读。
- 每一条宏定义的右边必须要有注释,说明其作用。
- 注释内容在
// ...
或/* ... */
中间应该有空格。
示例
# include <stdio.h>
# include <math.h>
int main(void)
{ // 函数 {} 要对齐
/* 定义变量的同时进行初始化 */
int a = 1;
int b = 2;
int c = 1;
double delta;
double x1, x2;
delta = (b * b) - (4 * a * c);
if (delta > 0) { // if、for 的 {} 可以换行
x1 = (-b + sqrt(delta)) / (2*a);
x2 = (-b - sqrt(delta)) / (2*a);
printf("该一元二次方程有两个解,x1 = %f, x2 = %f\n", x1, x2);
}
else if (0 == delta) {
x1 = (-b) / (2*a);
x2 = x1; //左边值赋给右边
printf("该一元二次方程有一个唯一解,x1 = x2 = %f\n", x1);
}
else {
printf("无解\n");
}
return 0;
}