1 共同

Rule 1 编译的Warnings不能被忽略掉

Rule 2 在已有Code或者三方的code基础上的改动,同意使用原来的coding standard

Rule 3 假设同意C和C++都訪问的同样的C的header 文件, extern C 必须在header文件中

#ifdef __cplusplus
extern "C" {
#endif/* body of header */#ifdef __cplusplus
}
#endif

2 命名规则

Rule4 全部名字的定义在16个字节范围内,最多不要超过31个

Rule5 名字的定义仅仅有字母数字和下划线

Rule6 不要使用保留名字

Rule7 代码文件以.h, .c 结尾

Rule8 代码的文件格式必须保持UNIX file format

Rule9 文件名称小写,当超过一个单词描写叙述时。用下划线分隔

structured_data_display.h
structured_data_display.c

Rule10 Typedefs, and enumerated types, structure types and union types 小写并用下划线分隔多个单词描写叙述, 结尾应以type结尾

typedef UINT8 user_data_struct_type

Rule11 宏定义, Enum的值,必须大写并下面划线分隔多个单词

#define USER_DATA_MAX_ERROR_CODES    15
enum user_data_struct_type
{USER_DATA_ERROR_INVALID_DATA,USER_DATA_ERROR_FAILURE};

Rule12 函数名必须是动词而且小写和下划线分隔多个单词

handle_error
check_for_error               /* NOT errorCheck */

Rule13 全局变量必须以g开头并下面划线分隔单词

g_default_interface

Rule14 函数的參数小写单词

void start_engine(engine_type*        myengine, UINT8          engine_id,const UINT32*  protected_data);

Rule15 structure的成员变量有下面规则

名字 标记 演示样例
static s_ static UINT8 s_some_number
static s_ static UINT8 s_some_number
constant c_ const UINT8 c_some_number
  cp_ const user_data_type* cp_user_data

3 Files

Rule16 每一个include的必须有机制防止多重包括

#ifndef FOO_H
#define FOO_H/* The rest of the file*/#endif

Rule17 相对路径的linux文件不同意出如今#include里

// NOT ALLOWED
#include <../foo/include/foo.h>

Rule18 头文件不同意有实现的代码

Rule19 每一个头文件仅仅include 其它有依赖的,包括相关定义的头文件,不include 全局性的头文件

Rule20 代码文件(.c)须要include 全局头文件以及相关头文件

4 代码风格和间隔

Rule21 在不论什么修改的文件都须要加上公司confidential的标识

/* -------------------------------------------------------------------------------Copyright (C) 2011, Nollec Wireless  CO. LTD. All Rights ReservedRevision History:Bug/Feature ID         Author                   Modification Date                      Description ------------------       -------------------         ------------------            ---------------------BugID/FeatureID      developer name       YYYY/MM/DD                          brief discription----------------------------------------------------------------------------------*/

Rule22 在不论什么修改或者新建的文件都须要加上公司confidential的标识

Rule23 Revision History 在Feature开发完毕或Bug解决完毕后必须更新

Rule24 全部的Comments必须用英文填写, 而且不能嵌入

Rule25 代码缩进的时候不要用Tab,用4个空格取代

// 跟编辑器有关,可设置void func()
{if (something bad){...if (another thing bad){}}

Rule26 Switch 必须有default

switch (testValue)
{case VALUE_1:/* Body for case 1. */break;case VALUE_2:/* Body for case 2. */break;default:/* Body for default. */break;
}

Rule27 不要在 . 或-> 前后有空格

Rule28 变量的声明应尽量控制到小的范围内

Rule29 指针 * 应该紧跟类型之后。 地址 &应该在变量名之前

Rule30 变量常量定义一定要有意义。不要用magic number

x = 100*10+1; //NOT ALLOWEDnumber = 100*10+1;

Rule31 每一个变量定义都要分行写。并且一定要给初值

UINT8 i, j;              /* NOT RECOMMENDED */
UINT8 i = INIT_VALUE;    /* GOOD */
UINT8 j = INIT_VALUE;    /* GOOD */

Rule32 全部状态变量或者enum的变量要明白赋予其值

/* INCORRECT*/
if (cpCurrentState == CP_L3_STATE_TYPE_D1)
{cpCurrentState++;
}
/*CORRECT*/
if (cp_currentState == CP_L3_STATE_TYPE_D1)
{cp_currentState = CP_L3_STATE_TYPE_D2;
}

Rule33 全部global的声明都要在一个header文件中

Rule34 常量声明须要有明白含义

(Does not meet requirements)
#define ONE         1
#define TWO         2(Meets requirements)
#define NUM_LOOPS_FOR_AD_READ   4
#define NUM_SAMPLES_TAKEN       8

Rule35 一个constant不能付给另外一个constant

Rule36 NULL仅仅用于指针的初始化和比較

Rule37 常量用在编译开关时候,一定要在编译控制的区域内

#define DEBUG 4  /* if undefined, disables debugging */
/* set to 1 - 4 for desired debugging level */
/* This usage of DEBUG in the for loop control statement is  * allowed since the statement is fully enclosed within the* conditionally compiled section of code.*/
#ifdef DEBUG
for (i = 0; i < DEBUG; i++)
{printf("i = %d\n", i);
}
#endifExample 31 -  Example (Incorrect Usage)
#define DEBUG 4
#ifdef DEBUG       /* usage here is fine */ /* do something special */
#endif
/* the code statement below is outside the segment controlled by * the #ifdef and therefore should NOT use DEBUG.*/
for (i = 0; ((i < 5) && DEBUG); i++)
{printf("i = %d\n", i);
}

Rule38 #ifdef #endif 用于编译时要有足够的凝视。并且#endif要有 //凝视相应的#ifdef

Rule39 用typedef 而不是#define来定义类型

Rule40 下列类型应在全局头文件中定义,并应用于代替C语言int类型:

INT8:此类型存储8位有符号数值。

UINT8:此类型存储8位无符号数值。

INT16:此类型存储16位有符号数值。

UINT16:此类型存储16位无符号数值。

INT32:此类型存储32位有符号数值。

UINT32:此类型存储32位无符号数值。

布尔值:理想情况下,此类型是枚举类型,将布尔值命名为TRUE(1)和FALSE(0)。但是,有些编译器可能无法有效地存储此内容。另一种方法是typedef UINT8 BOOLEAN;

它简单地将BOOLEAN定义为一个8位无符号值,与UINT8不同。在这种情况下,常量TRUE和FALSE必须是定义的常量。

Rule41 一个函数应该仅仅有一个return出口

Rule42 不要使用没有明白定义的參数

Rule43 函数return指针假设failure。则须要return NULL

Rule44 函数參数是单列数组不须要明白大小

(Correct Usage)
void functionName
(UINT8 x[],  /* array with "size" elements */UINT8 size  /* number of elements in x */
);
(Incorrect Usage)
void functionName (UINT8 x[10]);

Rule45 不论什么宏定义的拓展须要加上括号来限定

 (Correct):
#define A_CONSTANT  (ANOTHER_CONSTANT + 1)
a = ACONSTANT * 2;
(Incorrect):
#define A_CONSTANT  ANOTHER_CONSTANT + 1
a = ACONSTANT * 2;

Flow control, expressions

Rule46 Switch case必需要有break结束

Rule47 Switch default必需要有来控制以外情况

Rule48 不要使用Goto

Rule49 在比较的时候 左边要放常量

// NOT RECOMMENDED, imagine you forget one of the “=” signs
If (PHONE == IS_RESET)
{
}
// GOOD, the following statement eliminates the possible errors explained above
// and easier to follow the value that you are looking for
If (IS_RESET == PHONE)
{
}

Rule50 在使用else if的时候,else的部分须要加上

Rule51 if/else/while/for/do的区块不管一行还是多行,一定要加{}

// NOT RECOMMENDED
if (something)if (something else)doThis();elsewhile (input)doThat();// GOOD
if (something)
{if (something else){doThis();}else{while (input){doThat();}}
}

Memory

Rule52 一定保证从调用函数分配的内存在使用完成后释放内存, 一定在此调用函数凝视提醒

Dangerous memory management
error_code_type* myfunction(void)
{error_code_type* p_temp = malloc (sizeof(error_code_type));return p_temp;/* p_temp is never de-allocated and the user of myFunc cannot de-allocate*//* because a temporary copy of that instance is returned.*//* Calling user code shall take of the memory deallocating which will create*//* complexity and confusion*/
}

Rule53 在deference引用指针之前一定要对指针判定是否为NULL

UINT32* p_number = NULL;if (NULL == p_number){}

其它

Rule54 编译器相关的扩展在有必要的时候使用

#ifdef _HC11_
#define DIRECT _direct_ram
#else /* not _HC11_ */
#define DIRECT
#endif/* nSize located in direct RAM in embedded, normal RAM in UNIX */
DIRECT UINT8 nSize;

Rule55 编译器相关的扩展在有必要的时候使用

Rule56 全部丢失性的类型转换要明白cast

INT8   signed_value;
UINT16 long_value;
UINT8  short_value;/* Loss here is in accuracy going from signed to unsigned */
signed_value= (UINT8) short_value;
/* Loss here is in size, going from a 16 bit value to an 8 bit */
signed_value= (INT8) long_value;

Rule57 数组的访问仅仅能用方括号的形式访问,不要使用deference * 来访问

/*INCORRECT*/
*(masterList + 10) = 0;/*CORRECT*/
masterList[10] = 0;

Rule58 在condition如果确定要利用肯定的逻辑

c语言 编码规范 C Coding Standard相关推荐

  1. Google重磅发布Go语言编码规范

    前言 Google官方在2022.11.23重磅发布了Go语言编码规范. 这个编码规范源自于Google内部的Go项目,是Google的开发人员要遵守的代码规范. 在Go语言诞生后,全世界的Go开发者 ...

  2. Java语言编码规范(1)

    Java语言编码规范 原文出处http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html 2 文件名(File Names) 这部分列出了常 ...

  3. c语言把一段编码注释,C语言编码规范——着重注意点整理

    C语言编码规范--着重注意点整理 发布时间:2018-05-26 21:50, 浏览次数:260 C语言编码规范--着重注意点整理 编码规范的目的: 保证不同背景和经历的开发同学可以良好的协同开发 保 ...

  4. 【转】嵌入式软件:C语言编码规范

    引  言 嵌入式系统是指以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能.可靠性.成本.体积和功耗严格要求的专门计算机系统.嵌入式技术并不是一个独立的学科,它是伴随着微电子技术和计算 ...

  5. C语言编码规范——着重注意点整理

    C语言编码规范--着重注意点整理 编码规范的目的: 保证不同背景和经历的开发同学可以良好的协同开发 保证组织级的开发技能和经验得以共享和传承 编程最难的是命名!因为其他的算法.数据结构都有据可循. 命 ...

  6. 【转载】Uber Go语言编码规范

    文章目录 Uber Go语言编码规范 一. 介绍 二. 指导原则 指向interface的指针 接收器(receiver)与接口 零值Mutex是有效的 在边界处拷贝Slices和Maps 接收Sli ...

  7. Uber Go 语言编码规范

    Uber Go 语言编码规范 Uber 是一家美国硅谷的科技公司,也是 Go 语言的早期 adopter.其开源了很多 golang 项目,诸如被 Gopher 圈熟知的 zap.jaeger 等.2 ...

  8. C语言编码规范汇总篇

    PDF资源链接:https://download.csdn.net/download/rootcode/11614413 或自己复制以下文章即可! C语言编码规范 1--文件与目录 1.文件及目录的命 ...

  9. Java语言编码规范

    目录1 介绍 1.1 为什么要有编码规范 1.2 版权声明 2 文件名 2.1 文件后缀 2.2 常用文件名 3 文件组织 3.1 Java源文件 3.1.1 开头注释 3.1.2 包和引入语句 3. ...

最新文章

  1. 2022-2028年中国普鲁兰多糖行业市场分析及投资前景研究报告
  2. NetScaler的部署实验之二NetScaler的传输环路值的设定
  3. 双机热备+Win2003下集群案例
  4. 绝症老父亲即将说不了话,儿子用AI技术挽留他的声音
  5. python处理流程-Python文件处理流程
  6. ubuntu安装搜狗输入法的相关问题
  7. 大型分布式网站术语分析 15 条,你知道几条?
  8. Entity Framework 学习中级篇3—存储过程(中)
  9. hadoop安装笔记-cdh4
  10. 避开Google Voice Search利用Google Speech API实现Android语音识别
  11. MailBee.NET Objects接收电子邮件(POP3)教程一:接收简单的电子邮件
  12. [CF808B] Average Sleep Time([强行]树状数组,数学)
  13. c++题目大坑:分数化小数
  14. [解决]RESTEASY003215: could not find writer for content-type text/html type: java.lang.String
  15. 一款好用的取色工具TakeColor
  16. 信捷plc485通信上位机_变频器、触摸屏和PLC建立MODBUS RTU通信的方法
  17. 机房收费系统——可行性研究报告
  18. arcgis的lyr样式转qgis的sld样式
  19. Mac无法开机?别着急看这里
  20. 输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到大排列。

热门文章

  1. Linux Kernel TCP/IP Stack — L2 Layer — Traffic Control(流量控制)
  2. 分布式消息队列 — RabbitMQ(3)
  3. altium designer 原理图和PCB 多通道设计
  4. Altium Designer PCB快速布局
  5. 一种嵌套滑动冲突的解决方案
  6. GetLastError 函数返回值大全
  7. 小M的简单题(easy)
  8. XHTML学习资料(四)—— 图像
  9. IE9(测试版)浏览器实用快捷键使用方法
  10. 用Windows Live Writer离线更新博思日志