当前位置:文档之家› C语言编程规范

C语言编程规范

C语言编程规范和约定

排版
? ? ? ? 缩进 空行 空格 代码长度

缩进
? 缩进量=4 ? 用空格取代TAB
if?(1?==?reset_flag) { reset_state(); } else { for?(n=1;?n<20;?n++) { update_state(); } }
if?(1?==?reset_flag){ reset state(); reset_state(); }?else?{ for?(n=1;?n<20;?n++)?update_state(); }

switch语句缩进
do it() void?do_it() { switch?(state) { case?STAT_A: … break; case?STATE_B: … break; default: b break; k } }
case向左和switch对齐

程序标号
s16 t?do_it() do it() s16_t { flag=do_A(); if?( (ERROR==flag) g) goto exit; flag=do_B(); if?(ERROR==flag) goto exit; … exit: clear_memory(); l () return?‐1; }
程序标号向左顶格

空行的使用
不同的程序逻辑段落用空行分隔 ? 函数之间加空行 ? 变量申明和函数之间加空行 ? 逻辑段落之间加空行

u32_t?read_flag; u32_t?read_count; u32_t?write_flag; u32_t?write_buff; u32_t _ write_count; _ ; s32_t?read_data(u8_t?*buf,?u32_t?size) { u8_t?flag; if?(NULL==buf) return?‐1; if?((‐1?==?size)?||?(size>=MAX_READ_SIZE)) return?‐1; flag=read_port_status(); … } s32_t?read_data(u8_t?*buf,?u32_t?size) { … }
空行的 使用

空格的使用(建议)
? ==、=、+、‐、*、/、>、<、>=、<=、:运算符 两边加空格 ? 标点符号前不加空格,后面加一个空格 ? if、for、while后面加空格 ? 多重括号运算建议用空格表明层次关系
if?(1?==?reset_flag) t fl ) { reset_state(); count?=?(count>=BUF_SIZE (count> BUF SIZE‐1)??BUF_SIZE BUF SIZE‐1?:?count+1; } else?if?(((1==status)||(2==status))?&&?((20==count)||(0==count))) { for?(n=1;?n<20;?n++) { index?=?read_port() read port()?+?(count (count*sizeof(data sizeof(data_t)); t)); } }

空格的使用(建议)
? ‐>、. 前后不加空格 ? ++、‐‐前后不加空格
(不要将++、‐‐用于有歧义的地方)
? 数组名和[]之间、函数名和 ()之间不加空格
if(1==reset_flag) if(1==reset flag) { reset_state(); ary [5]?++?; data?‐>?flag=1; status?.?overflow=1; } else { for(n=1 ( ;?n<20?;n++) ) index=read_port()+(count*sizeof(data_t)); }

空格的使用
? 指针指示符*和指针类型之间留空格,和指 针名不留空格
unsigned?char?*p1,?*p2;

折行
? 每行不超过80列 ? 在逻辑分割点折行 ? 折行内容尽量对齐
if?(1?==?reset_flag) { reset_state(); reset state(); count?=?(count>=BUF_SIZE‐1)??BUF_SIZE‐1?:?count+1; } else?if?((( (((1==status)||(2==status)||(8==status)) )||( )||( )) &&?((20==count)||(0==count)) &&?(0==flag)) { for?(n=1;?n<20;?n++) { index?=?read_port()?+?(count*sizeof(data_t)); } }

折行
perm_count_msg.head.len =?NO7_TO_STAT_PERM_COUNT_LEN +?STAT_SIZE_PER_FRAM*sizeof(array); act_task_table[frame_id*STAT_TASK_CHECK_NUMBER+index].occupied =?stat_poi[index].occupied; act_task_table[taskno].duration_true_or_false =?SYS_get_sccp_statistic_state(stat_item); report_or_not_flag =?((taskno

折行
n7stat_str_compare((u8_t?*)&stat_object, (u8 t?*) (u8_t )?&?(act_task_table[taskno].stat_object), (act task table[taskno] stat object) sizeof (data_t));?
rect.length =?0;?rect.width =?0; if?(pUserCR ==?NULL)?return;?
强制折行

注释
? 基本要求 ? 模板

基本要求
? ? ? ? ? ? ? 英文 需要大约20%的程序注释 尽量让代码本身说明功能 注释和程序一同更新 防止歧义 减少缩写 对于协议标准编程可以加入标准文献的索 引(文献名称、章节号 文献名称 章节号)

注释位置
? 逻辑段落的注释放在段落前一行 ? 语句的注释放在语句之后 ? 注释和被注释的代码之间没有空行
void?do_it() { //?function?of?following?init?paragraph init_data1(); init data2(); init_data2(); //?function?of?floowing do?paragraph p (); do_step1(); do_step2(); do_step3(3); //?special?notes?on?this?line }

注释位置
length++;?//?increase?length 没有必要注释 // function?of?following g?code //?… /// 去除空行 if?(…) { … } do_func();

注释方法
? 尽量使用 //?作为程序内部注释 ? / /*?‐‐ */ /?用于文件、函数头部注释段落 ? 在不同条件下可能被使用的代码不能注释 掉 用#if 掉,用 f?0?‐‐ #endif df

注释内容
? ? ? ? ? ? 文件开头需要注释段落 文件 头需要注释段落 函数开头需要注释段落 全局变量需要详细注释 特殊功能的局部变量需要详细注释 变量bit域详细注释 为特殊功能的宏定义加注释

注释例子
#define?MAX_ACT_TASK_NUMBER?1000?//?active?statistic?task?number //?state?value?for?global?variable?state #define?STATE_A?0 #define?STATE_B?1 #define STATE_C?2 //?bit?mask?for?register?REG_MODE,?address?0xC000F000 #define?BIT_MASK_RD (1<<0) #define?BIT_MASK_IRQ (1<<3) #define d fi BIT_MASK_START S S (0xFF00) (0 00) u8_t?status; //?bit?0: overflow //?bit?1~3: 1 3:?counter co nter //?bit?4: IRQ?status //?…

相关主题
文本预览
相关文档 最新文档