【技巧一】
#if 0
//Code here
#endif
用于方便地注释不愿意舍弃的代码,将0改为1又可以重新启用这部分代码。ps:频繁地注释和启用某一段代码进行某项测试任务时,相当有用。
【技巧二】
sleep(0);
用于让出CPU时间片。【技巧三】
do
{
//Code here
}while(0);
a、用于出错资源释放处理,减少代码冗余,避免使用goto语句;b、用于宏函数定义中,提高健壮性,例如:
#define SAFE_FREE(p) do{free(p); p = NULL; }while(0)
#define SAFE_FREE(p) {free(p); p = NULL; }
前者比后者好,是因为C/C++程序员习惯在每个语句后加‘;’,如果SAFE_FREE(p)被定义为后者,则如下代码编译过不了:
if(NULL != p)SAFE_FREE(p);
else dosomething; //Compile error!
ps:虽然建议if-else每个分支都加大括号,但是并不能保证人人都这么做!【技巧四】
//文件信息列表头结构
typedef struct {
ulong ulOffset;
ulong ulFileSize;
}ET_FILE_INFO;
typedef struct{
uint uiProgramNum;
uint uiParaNum;
ET_FILE_INFO tFileInfo[0]; //所谓的柔性数组成员
}ET_FILE_INFOHEAD;
ps:柔性数组成员允许结构末尾包含一个大小可变的数组,这个在形式上长度为0的数组不在运算符sizeof的计算范围之内。