C头文件类型定义

C常用的类型定义 2016/05/14

便于移植,最好在代码编写的时候 采用格式定义

格式定义

注意无符号有符号的转换,溢出导致出现的死循环

//重新定义一些类型
//防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。
typedef  unsigned char      boolean;     /* Boolean value type. */
typedef  unsigned long	uint32;      /* Unsigned 32 bit value */
typedef  unsigned short     uint16;      /* Unsigned 16 bit value */
typedef  unsigned char      uint8;       /* Unsigned 8  bit value */
typedef  signed long	int32;       /* Signed 32 bit value */
typedef  signed short       int16;       /* Signed 16 bit value */
typedef  signed char        int8;        /* Signed 8  bit value */
#ifndef FALSE
#define FALSE 0
#endif	
#ifndef TRUE
#define TRUE 1
#endif
#ifndef NULL
#define NULL 0
#endif

一些常用宏定义

想了解更多,这里是原出处,这里记录下自己遇到过的.

得到一个field在结构体(struct)中的偏移量

#define FPOS(type,field) ((uint32)&((type *)0)->field)

代码的注释 宏打开与关闭 #define DEVELOP_TEST_ENV 1 #if DEVELOP_TEST_ENV #define LogMsg(…)\ {API_Trace(DBG_APP_MASK,##VA_ARGS);}

#define LogMem(pMsg,pData,iDatalen) \ {API_TraceHex(DBG_APP_MASK,pMsg,pData,iDatalen);}

#else #define LogMsg(…) #define LogMem(pMsg,pData,iDatalen) #endif

得到一个结构体中field所占用的字节数 #define FSIZ(type,field) sizeof(((type *)0)->field) 宏定义要注意-定义的是函数


有问题的定义:#define DUMP_WRITE(addr,nr) {memcpy(bufp,addr,nr); bufp += nr;}

应该使用的定义: #define DO(a,b) do{a+b;a++;}while(0)

下面是一个例子

if(addr) DUMP_WRITE(addr,nr); else do_somethong_else(); 宏展开以后变成这样: if(addr) {memcpy(bufp,addr,nr); bufp += nr;}; else do_something_else();


可变参数

如下利用可变参数来记录日志内容

int ZTlog_tofile(char filename,char * format,…) { int n; FILE * logfile; char tempbuf[64]; int filesize=0; va_list arg_ptr; //变体参数变 //取得变体参数,开始变体参数处理 va_start(arg_ptr, format); struct tm *timestrp; time_t timep=time(NULL); timestrp=localtime(&timep); filesize = get_file_size(filename); if(filesize>=41024*1024) { remove(filename); } logfile = fopen(filename, “a+”); if(logfile<0) return 0; //写日期时间 memset(tempbuf,0x0,sizeof(tempbuf)); sprintf(tempbuf,”%04d/%02d/%02d %02d:%02d:%02d “,timestrp->tm_year+1900, timestrp->tm_mon+1,timestrp->tm_mday,timestrp->tm_hour, timestrp->tm_min,timestrp->tm_sec); fwrite(tempbuf, 1, strlen(tempbuf), logfile); n = vfprintf(logfile, format, arg_ptr); //返回值为写入的字节数
va_end(arg_ptr); //结束变体参数处理 fclose(logfile); //刷新文件 return 0; }



扫描关注我

(转载本站文章请注明作者和出处 Undefined

Post Directory