目录

前文列表

程序编译流程与 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. #树链剖分,线段树#洛谷 2146 [NOI2015]软件包管理器

    题目传送门 分析 安装时1到\(x\)路径上都变为1,删除时\(x\)的子树都变为0, 显然可以用树链剖分+线段树实现 代码 #include <cstdio> #include < ...

  2. #虚树,树形dp#CF613D Kingdom and its Cities

    洛谷题面 Codeforces 分析 若两个重要城市为一条边的两个顶点显然无解 否则考虑建一棵虚树,设\(dp[x]\)表示以\(x\)为根的子树最少需要摧毁的城市数, 令\(Siz[x]\)表示\( ...

  3. Go 实战|使用 Wails 构建轻量级的桌面应用:仿微信登录界面 Demo

    概述 本文探讨 Wails 框架的使用,从搭建环境到开发,再到最终的构建打包,本项目源码 GitHub 地址:https://github.com/mazeyqian/go-run-wechat-de ...

  4. 陈海波:OpenHarmony技术领先,产学研深度协同,生态蓬勃发展

      11月4日,以"技术筑生态,智联赢未来"为主题的第二届OpenHarmony技术大会在北京隆重举办.本次大会由OpenAtom OpenHarmony(简称"Open ...

  5. C# 字符串操作指南:长度、连接、插值、特殊字符和实用方法

    字符串用于存储文本.一个字符串变量包含由双引号括起的字符集合 示例: // 创建一个string类型的变量并赋予一个值 string greeting = "Hello"; 如果需 ...

  6. 如何打造3D立体世界?跟随图片一同探寻

    怎样让平面的手机,呈现出炫酷的三维立体世界效果?虚拟与现实又要怎样完美结合? HMS Core图形等领域能力全面开放,使能3D数字世界创新.请跟随图片一起进入HMS Core打造的3D立体世界吧. 了 ...

  7. Hive 查看,删除分区

    查看所有分区 show partitions 表名; 删除一般会有两种方案 1.直接删除hdfs文件 亲测删除hdfs路径后 查看分区还是能看到此分区 可能会引起其他问题 此方法不建议 2. 使用删除 ...

  8. VIM YouCompleteMe(ycm) 对于Python3第三方库的自动补全【部分解决】

    VIM YouCompleteMe(ycm) 对于Python3第三方库的自动补全[部分解决] Python3 学习笔记 问题:VIM 用YouCompleteMe(ycm)自动补全插件时,只能支持P ...

  9. Lattice下载器高速编程器HW-USBN-2B fpga仿真器ispdown烧录器

    1.概述 HW-USBN-2B 编程烧录Lattice所有芯片,速度非常快.支持Lattice FPGA芯片在线稳定仿真.烧录.加密,支持Lattice CPLD烧录.支持外部配置FLASH.PROM ...

  10. 力扣48(java)-旋转图像(中等)

    题目: 给定一个 n × n 的二维矩阵 matrix 表示一个图像.请你将图像顺时针旋转 90 度. 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要 使用另一个矩阵来旋转图像 ...