目录

前文列表

程序编译流程与 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 调试工具

空行

空行起着分隔程序段落的作用,空行得体将使程序的布局更加清晰,更具可读性。

  1. 定义变量后要空行。尽可能在定义变量的同时初始化变量,即遵循就近原则。如果变量的引用和定义相隔比较远,那么变量的初始化就很容易被忘记。若引用了未被初始化的变量,就会导致程序出错。
  2. 每个函数定义结束之后都要加空行。
  3. 两个相对独立的程序块必须要加空行。

空格

  1. 关键字之后要留空格。像 const、case 等关键字之后至少要留一个空格,否则无法辨析关键字。像 if、for、while 等关键字之后应留一个空格再跟左括号 (,以突出关键字。
  2. 函数名之后不要留空格,应紧跟左括号 (,与关键字进行区别。
  3. , 之后要留空格。
  4. 如果 ; 不是一行的结束符号,其后要留空格。
  5. 赋值运算符、关系运算符、算术运算符、逻辑运算符、位运算符,e.g. 如 =、==、!=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=、|=、>、<=、>、>=、+、-、*、/、%、&、|、&&、||、<<、>>、^ 等**双目运算符(两端有操作数)**的前后要加空格。
  6. 单目运算符(只有一端有操作数),e.g. !、~、++、--、-、*、& 等前后不加空格。

    注意:规则 6 中的 - 是负号运算符、* 是指针运算符、& 是取地址运算符。
  7. 数组符号 []、结构体成员访问运算符 .、指向结构体成员运算符 ->,这类操作符前后不加空格。
  8. 对于表达式比较长的 for 语句和 if 语句,其表达式可以适当的删除一些空格,例如:for (i=0; i<10; i++){}

缩进

缩进是通过键盘上的 Tab 键实现的,缩进可以使程序更有层次感。原则是:如果地位相等,则不需要缩进;如果属于某一个代码的内部代码就需要缩进。

对齐

对齐主要是针对大括号 {} 说的,这里是风格纠纷的重灾区,有换行派、有不换行派,具体看项目的整体约定。

  1. {} 分别都要独占一行。互为一对的 {} 要位于同一列,并且与引用它们的语句左对齐。
  2. {} 之内的代码要向内缩进一个 Tab,且同一地位的要左对齐,地位不同的继续缩进。
#include <stdio.h>
int main(void)
{
if (…) {}
return 0;
}

代码行

  1. 一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且便于写注释。
  2. if、else、for、while、do 等语句自占一行,执行语句不得紧跟其后。此外,非常重要的一点是,不论执行语句有多少行,就算只有一行也要加 {},并且遵循对齐的原则,这样可以防止书写失误。

注释

注释通常用于重要的代码行或段落提示。在一般情况下,源程序有效注释量必须在 20% 以上。虽然注释有助于理解代码,但注意不可过多地使用注释。

  1. 注释是对代码的 “提示”,而不是文档。程序中的注释不可喧宾夺主,注释太多会让人眼花缭乱。
  2. 如果代码本来就是清楚的,则不必加注释。
  3. 边写代码边注释,修改代码的同时要修改相应的注释,以保证注释与代码的一致性,不再有用的注释要删除。
  4. 当代码比较长,特别是有多重嵌套的时候,应当在段落的结束处加注释,这样便于阅读。
  5. 每一条宏定义的右边必须要有注释,说明其作用。
  6. 注释内容在 // .../* ... */ 中间应该有空格。

示例

# 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;
}

C 语言编程 — 代码规范的更多相关文章

  1. 单片机开发之C语言编程基本规范

    为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范.本标准规定了程序设计人员进行程序设计时必须遵循的规范.本规范主要针对单片机编程语言和08编译器而言,包括排版.注释.命名.变量 ...

  2. jQuery编程代码规范的最佳实践

      好像是feedly订阅里看到的文章,读完后觉得非常不错,译之备用,多看受益. 加载jQuery 1.坚持使用CDN来加载jQuery,这种别人服务器免费帮你托管文件的便宜干嘛不占呢.点击查看使用C ...

  3. Java 代码规范,你应该知道的一些工具和用法

    从事编程这个行业,你一定被别人说过或者说过别人这句话:代码要规范!求职面试时也能从 JD 上看到这个要求:要有良好的编程习惯.其实都是在讲代码规范(Code Style)这件事情. 每个人都有自己的编 ...

  4. Java 代码规范,你应该知道的一些工具和用法(转)

    转自:http://yifeng.studio/2017/06/30/coding-with-code-style/ Java 代码规范,你应该知道的一些工具和用法 2017-06-30 从事编程这个 ...

  5. 华为C语言编程规范

    DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...

  6. linux shell语言编程规范安全篇之通用原则【转】

    shell语言编程规范安全篇是针对bash语言编程中的数据校验.加密与解密.脚本执行.目录&文件操作等方面,描述可能导致安全漏洞或风险的常见编码错误.该规范基于业界最佳实践,并总结了公司内部的 ...

  7. C语言编程规范

    C语言编程规范 6 函数与过程 6.1 函数的功能与规模设计 函数应当短而精美,而且只做一件事.不要设计多用途面面俱到的函数,多功能集于一身的函数,很可能使函数的理解.测试.维护等变得困难. 6.2 ...

  8. 《手把手教你学C语言》学习笔记(4)---代码规范

    编程过程中需要遵守编译器的各种约定,例如以下代码: 1 #include <stdio.h> 2 3 int main(int argc, char **argv) 4 { 5 print ...

  9. C语言编程规范试题(标准答案)

    C语言编程规范试题(标准答案) 一.单选题(每小题3分,共20小题60分) 1.1-1.5    B D A C B                1.6-1.10    C A D B C 1.11 ...

  10. C语言编程规范试题

    C语言编程规范试题 [说明]: 1.本试题中不考虑头文件引用问题(假定已经包含正确的头文件),C语言的标准函数都可用: 2.如果不特别说明,假定程序运行环境为:操作系统Windows 2000, VC ...

随机推荐

  1. #NTT,DP#U138580 简单的打击

    题目 给出两个等长的序列\(a,b\), 重排序列\(b\),使得\(a+b\)众数出现的次数最多 分析 设\(f[i]\)表示众数为\(i\)的贡献,那么 \(f[i]=\sum_{j<i}m ...

  2. ubuntu环境下因pie选项导致双击启动失败的问题

    在ubuntu环境下,链接可执行文件时增加-pie选项,双击可执行程序,无法正常启动. 对于这个现象,stackoverflow有个帖子,gcc creates mime type applicati ...

  3. Docker学习路线5:在 Docker 中实现数据持久化

    Docker 可以运行隔离的容器,包括应用程序和其依赖项,与主机操作系统分离.默认情况下,容器是临时的,这意味着容器中存储的任何数据在终止后都将丢失.为了解决这个问题并在容器生命周期内保留数据,Doc ...

  4. Vue3开源组件库

    最近收到的很多问题都是关于Vue3组件库的问题 今天就给大家推荐几个基于Vue3重构的开源组件库 目前状态都处于Beta阶段,建议大家抱着学习的心态入场,勿急于用到生产环境 Ant-design-vu ...

  5. c#程序员必学清单补充

    作为 C# 程序员,除了上述经典书籍和开源框架外,还需要掌握以下技术: 1. .NET Core 和 ASP.NET Core:了解并熟练掌握 .NET Core 和 ASP.NET Core 框架, ...

  6. 力扣14(java)-最长公共前缀(简单)

    题目: 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入:strs = ["flower"," ...

  7. 基于信通院 Serverless 工具链模型的实践:Serverless Devs

    简介: Serverless Devs 作为开源开放的开发者工具,参编中国信通院<基于无服务器架构的工具链能力要求>标准,为行业统一规范发挥助推作用!​ 作者 | 江昱(阿里云 Serve ...

  8. KubeCon 2020 演讲集锦|《阿里巴巴云原生技术与实践 13 讲》开放下载

    2020 年 7 月 30 日至 8 月 1 日,由 Cloud Native Computing Foundation (CNCF) 主办的云原生技术大会 Cloud Native + Open S ...

  9. 如何开发 Node.js Native Add-on?

    简介: 来一起为 Node.js 的 add-on 生态做贡献吧~ 作者 | 吴成忠(昭朗) 这篇文章是由 Chengzhong Wu (@legendecas),Gabriel Schulhof ( ...

  10. 如何将一棵LSM-Tree塞进NVM

    ​简介: 随着非易失内存产品的商业化推广,我们对于其在云原生数据库中大规模推广的潜力越来越有兴趣.X-Engine是阿里云数据库产品事业部PolarDB新型存储引擎团队研发的一个LSM-tree存储引 ...