C语言规约编程,C语言编程规约(个人规约)

个人理解:程序第一是要供人阅读的,方便业内人员交流、沟通。也方便自己或者他人维护、升级。所以编写程序需要一定的规约,来保持编写代码的简洁性和一致性。

关于c语言基本数据类型:

为方便跨硬件平台移植,我定义一下数据类型。

typedef unsigned char      BOOLEAN;

typedef unsigned char      INT8U;

typedef signed   char         INT8S;

typedef unsigned short     INT16U;

typedef signed   short        INT16S;

typedef unsigned int         INT32U;

typedef signed   int         INT32S;

typedef float                         FP32;

typedef double                    FP64;

程序里统一使用以上新定义的数据类型,移植时只需重新定义即可。

关于标示符的定义:

标示符主要包括 局部变量、全局变量、函数、宏定义。分别对其进行规约。

阅读代码时首先关注标示符含义,因此所有标示符均按照逻辑意义分级法定义。对全局变量采用大小写混合方式,大写字母用于分割各个单词,例如,Msg、ErrNum、OSSemPend(取自ucos的信号量操作函数)。若中间存在大写字母缩写,可以使用下划线,例如,Read_RFC_Text.。缩写方式,简单单个词语略去元音,复杂的标示符采用各个词语的首字母或者略去元音后的单词组合。

局部变量使用小写字母表示,若比较复杂,可以使用下划线。例如,kernel_text_address

其中定义结构体类型时,标示符最后添加 “_t”,例如:Cat _t  代表一种车的数据类型。

定义函数名称时:若定义的是模块对外接口函数遵循全局变量的方式,并使用谓语加宾语的方式,例如:WriteByte。

如果函数为最底层,可以考虑用全部小写,单词间采用带下划线的形式。如底层图形函数:pixel、lineto以及读键盘函数get_key 等。且这些函数仅供模块内部使用,并不对外提供接口,因此使用static关键字限定。

宏定义:若程序中需频繁调用很小部分代码或者常量定义,可以定义成宏。标示符使用大写字母,各个单词间使用下划线分割。例如,T_LWIP_THREAD_STKSIZE(取自lwip源码)。复杂带参数的宏定义这样定义,

#define FOO(x) do { \

printf("arg is %s\n", x); \

do_something_useful(x); \

} while(0)

用do-while(0)方式定义宏,完全不用担心使用者如何使用宏,也不用给使用者加什么约束。

在头文件中使用以下代码防止重复包含。

#ifndef __DEBUG_H

#define __DEBUG_H

#endif

注意:一个工程中标示符的定义要尽量保持风格一致,尽量避免使用汉语拼音。

语句、语句块、赋值与运算符。

为了凸显if、for、do、switch等关键词,在这些关键字之后添加一个空格。在运算符前后也各添加一个空格。例如:

if (pmem == (OS_MEM *)0)

对花括号的缩进方式,{和上一行语句对齐,}和{对齐。对于深层次for循环和if采用递层缩进方式。例如:

for (i = 0;i < max_num;i++)

{

for (j = 0; j

{

语句;

}

}

较长的语句应进行分割,例如

(void)OSTaskCreateExt(OS_TaskStat,

(void *)0,

&OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],

OS_STAT_PRIO,

OS_TASK_STAT_ID,

&OSTaskStatStk[0],

OS_TASK_STAT_STK_SIZE,

(void *)0,

OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

分割成的新行应进行重新排版,使其尽量整齐。

注释:

在代码的功能、意图层次上进行注释,即注释解释代码难以直接表达的意图,而不是重复描

述代码。

对全局变量应进行详细的注释。

定义变量应一行定义一个,方便注释。

函数的注释:一般包括函数名称 、功能描述、入口参数、出口参数、使用方法。例如:

//*------------------------------------------------------------------------------------------------

//* 函数名称 : SysThreadNew

//* 功能描述 : 建立一个新线程

//* 入口参数 : [in] 新线程的入口地址

//*                : [in] 传递给新线程的参数

//*                :[in] 由LwIP指定的新线程优先级,这个优先级从1开始

//* 出口参数 : 返回线程优先级,注意这与prio不同。这个值实际等于T_LWIP_THREAD_START_PRIO + prio,

//*                : 如果建立不成功则返回0

//*  使用方法:SysThreadNew(tcpip_thread, NULL, TCPIP_THREAD_PRIO);

//*------------------------------------------------------------------------------------------------

针对函数的注释,有两类人关心其内容,若函数是对外提供接口的,那使用者关心怎么使用这个函数,若是开发人员想更改其实现算法,则更关心其实现方案。可根据实际情况做有针对性的注释。若是对外提供接口,注释主要是针对使用者的,重点写怎么使用这个函数以及注意事项。若是内部功能函数的注释,则主要描述实现思路和策略。方便开发者理解你的实现细节。

文件注释:

*------------------------------------------------------------------------------------------------

//* 文件名:

//* 功能描述:

//* 作者            :

//* 版本: 0.1

//* 建立日期、时间:

//* 修改日期、时间        :

//* 修改原因:

//* 修改记录:

//*------------------------------------------------------------------------------------------------

//*------------------------------------------ 头文件 ----------------------------------------------

关于工程中文件名的命名,不同系统对文件名大小写处理不同,因此统一采用小写,名字长的使用下划线分割。如:

sys_arch.c

附录1:常见单词缩写

argument                 arg

buffer                       buff

clock                        clk

command                cmd

compare                  cmp

configuration           cfg

device                      dev

error                         err

hexadecimal            hex

increment                inc

initialize                  init

maximum               max

message                msg

minimum                min

parameter             para

previous                prev

register                 reg

semaphore           sem

statistic                 stat

synchronize          sync

temp                     tmp

附表2:常用反义词

add/remove           begin/end           create/destroy

insert/delete        first/last          get/release

increment/decrement    put/get       add/delete

lock/unlock          open/close     min/max

old/new              start/stop    next/previous

source/target        show/hide    send/receive

source/destination   copy/paste          up/down

版权声明:本文为博主原创文章,未经博主允许不得转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值