注释规范
文件注释,函数注释等,参考doxygen规模。
注释规范
- 每个C文件开头都一段注释,标明文件的名称,作者,编写日期,文件描述与版本修改,下面是一个可以参考的例子:
// todo
每个函数的定义处都需要写注释,表示该函数的名称,作者,作用,以及该函数的输入输出值。
- 程序的关键代码需要用注释说明
- 注意注释不要过多,很多时候,可以通过合理的命名让程序具有*自解释性*。
流程图
关于数字的指数形式,比如10e9,其类型默认为浮点型,也就是说如果要用这种形式进行整数运行,则必须要进行强制类型转换,如下:
int n; ... int a = n % (10e9 + 7); // 错误,10e9+7 最终类型是浮点型,不可以用于求余运算 int a = n % ((int)10e9 + 7) // 正确
待确认:结构体位域按1字节对齐,相邻位域不填充。
用宏可以实现的一些骚操作,比如下面这个宏:
#define HI_APPCOMM_LOG_AND_RETURN_IF_FAIL(ret, errcode, errstring) \ do { \ if ((ret) != HI_SUCCESS) { \ MLOGE("[%s] failed[0x%08X]\n", (errstring), (ret)); \ return (errcode); \ } \ } while (0)
这个宏可以处理常见的根据返回值退出的操作。
C语言实现memdump函数:
效果:
关于枚举值的变量类型,一般认为是int型,但某些嵌入式设备上,枚举值的类型实际是char,像下面这样的枚举值定义会出现问题:
typedef enum State { StateA = 1 << 0, StateB = 1 << 1, StateC = 1 << 2, ... StateX = 1 << 8 // 错误,超出char类型范围了 } STATE_E;
对此,只能将枚举值转化为宏定义,如下:
typedef unsigned int STATE_E; #define StateA (1 << 0) ... #define StateX (1 << 8)