C语言项目常用的头文件声明及相关宏定义

 1 /*
 2  *
 3  * base_include.h
 4  *
 5  * 基本头文件引用声明。
 6  *
 7  * 本代码支持win32平台和linux平台。
 8  *
 9  * Copyright (c)2012,lizhi<ibox>
10  *
11  * 2012-10-10 V1.0 lizhi<QQ:252240557,msn:ddgooo@hotmail.com> created
12  *
13  *
14  */
15 
16 
17 #ifndef __INCLUDE_BASE_INCLUDE_H
18 #define __INCLUDE_BASE_INCLUDE_H
19 
20 
21 /*
22  * Macro开关
23  */
24 #ifndef WIN32
25 #define WIN32
26 #endif
27 
28 /*
29  * Common header file
30  */
31 #include <stdio.h>
32 #include <stdlib.h>
33 #include <string.h>
34 #include <errno.h>
35 #include <assert.h>
36 #include <fcntl.h>
37 #include <sys/stat.h>
38 #include <stdarg.h>
39 #include <time.h>
40 #include <signal.h>
41 #include <malloc.h>
42 #include <memory.h>
43 #include <limits.h>
44 #include <math.h>
45 #ifdef WIN32 /* windows */
46 #include <windows.h>
47 #else /* linux */
48 #endif
49 /*
50  * Common Network header file
51  */
52 #ifdef WIN32 /* windows */
53 //#include <winsock2.h>
54 #else /* linux */
55 #include <sys/types.h>
56 #include <sys/socket.h>
57 #include <netinet/in.h>
58 #include <arpa/inet.h>
59 #include <sys/time.h>
60 #include <netdb.h>
61 #include <sys/ioctl.h>
62 #include <net/if.h>
63 #include <sys/utsname.h>
64 #include <netinet/in.h>
65 #include <netinet/ip.h>
66 #include <netinet/tcp.h>
67 #include <netinet/ip_icmp.h>
68 #include <netpacket/packet.h>
69 #include <net/ethernet.h>
70 #include <linux/fb.h>
71 #include <sys/mman.h>
72 #include <asm/types.h>
73 #endif
74 
75 
76 
77 
78 
79 
80 #endif /* __INCLUDE_BASE_INCLUDE_H */
 1 /*
 2  *
 3  * base_type.h
 4  *
 5  * 基本数据类型引用声明。
 6  *
 7  * 本代码支持win32平台和linux平台。
 8  *
 9  * Copyright (c)2012,lizhi<ibox>
10  *
11  * 2012-10-10 V1.0 lizhi<QQ:252240557,msn:ddgooo@hotmail.com> created
12  *
13  */
14 
15 
16 #ifndef __INCLUDE_BASE_TYPE_H
17 #define __INCLUDE_BASE_TYPE_H
18 
19 /*
20  * 头文件
21  */
22 #include "base_include.h"
23 
24 
25 /*
26  * 基础数据类型定义(base data type define)
27  */
28 typedef char                            s8;
29 typedef unsigned char                   u8;
30 typedef short                           s16;
31 typedef unsigned short                  u16;
32 typedef long                            s32;
33 typedef unsigned long                   u32;
34 typedef float                           f32;
35 typedef double                          f64;
36 
37 #if defined(WIN32) /* windows */
38 typedef __int64                         s64;
39 typedef unsigned __int64                u64;
40 #else /* linux */
41 typedef long long                       s64;
42 typedef unsigned long long              u64;
43 #endif
44 
45 
46 /*
47  * BOOL、TRUE、FALSE、NULL 定义
48  */
49 #ifndef BOOL
50 #define BOOL                            (s32)
51 #endif
52 #ifndef TRUE
53 #define TRUE                            (0x01)
54 #endif
55 #ifndef FALSE
56 #define FALSE                           (0x00)
57 #endif
58 #ifndef NULL
59 #define NULL                            (0x00)
60 #endif
61 
62 
63 /*
64  * 函数参数类型说明
65  */
66 #ifndef IN
67 #define IN
68 #endif
69 #ifndef OUT
70 #define OUT
71 #endif
72 #ifndef INOUT
73 #define INOUT
74 #endif
75 
76 
77 
78 #endif /* __INCLUDE_BASE_TYPE_H */
  1 /*
  2  *
  3  * base_debug.h
  4  *
  5  * 基本DEBUG调试宏定义。
  6  *
  7  * 本代码支持win32平台和linux平台。
  8  *
  9  * Copyright (c)2012,lizhi<ibox>
 10  *
 11  * 2012-10-10 V1.0 lizhi<QQ:252240557,msn:ddgooo@hotmail.com> created
 12  *
 13  */
 14 
 15 
 16 #ifndef __INCLUDE_BASE_DEBUG_H
 17 #define __INCLUDE_BASE_DEBUG_H
 18 
 19 
 20 /*
 21  * Macro开关
 22  */
 23 #ifndef USER_DEBUG
 24 #define USER_DEBUG
 25 #endif
 26 
 27 /*
 28  * debug调试宏定义
 29  */
 30 #ifdef USER_DEBUG
 31 
 32 
 33 #define _my_printf              printf
 34 
 35 
 36 #ifdef WIN32
 37 #define _my_print_info(strerr, strfile, iline)                          \
 38         fprintf(stderr,                                                 \
 39                 "  >%s, assert failed (%s:%d)\n"                        \
 40                 "  >errno : %d, %s\n"                                   \
 41                 "  >network last error : %d, last error : %d\n\n",      \
 42                 strerr, strfile, iline,                                 \
 43                 errno, strerror(errno),                                 \
 44                 WSAGetLastError(), GetLastError())
 45 #else
 46 #define _my_print_info(strerr, strfile, iline)                          \
 47         fprintf(stderr,                                                 \
 48                 "  >%s, assert failed (%s:%d)\n"                        \
 49                 "  >errno : %d, %s\n\n",                                \
 50                 strerr, strfile, iline,                                 \
 51                 errno, strerror(errno))
 52 #endif
 53 
 54 #define _my_assert(condition)                                           \
 55         do {                                                            \
 56                 if ( !(condition) ) {                                   \
 57                         _my_print_info("ERROR", __FILE__, __LINE__);    \
 58                         fflush(stderr);                                 \
 59                         exit(-1);                                       \
 60                 }                                                       \
 61         } while(0);
 62 
 63 #define _my_warn(condition)                                             \
 64         do {                                                            \
 65                 if ( !(condition) ) {                                   \
 66                         _my_print_info("WARNING", __FILE__, __LINE__);  \
 67                         fflush(stderr);                                 \
 68                 }                                                       \
 69         } while(0);
 70 
 71 #define _my_assertex(condition, file, line)                             \
 72         do {                                                            \
 73                 if ( !(condition) ) {                                   \
 74                         _my_print_info("ERROR", file, line);            \
 75                         fflush(stderr);                                 \
 76                         exit(-1);                                       \
 77                 }                                                       \
 78         } while(0);
 79 
 80 #define _my_warnex(condition, file, line)                               \
 81         do {                                                            \
 82                 if ( !(condition) ) {                                   \
 83                         _my_print_info("WARNING", file, line);          \
 84                         fflush(stderr);                                 \
 85                 }                                                       \
 86         } while(0);
 87 
 88 #define _my_assert_info(condition, info)                                \
 89         do {                                                            \
 90                 if ( !(condition) ) {                                   \
 91                         _my_print_info((info), __FILE__, __LINE__);     \
 92                         fflush(stderr);                                 \
 93                         exit(-1);                                       \
 94                 }                                                       \
 95         } while(0);
 96 
 97 #define _my_warn_info(condition, info)                                  \
 98         do {                                                            \
 99                 if ( !(condition) ) {                                   \
100                         _my_print_info((info), __FILE__, __LINE__);     \
101                         fflush(stderr);                                 \
102                 }                                                       \
103         } while(0);
104 
105 #else
106 
107 
108 #define _my_printf
109 #define _my_assert(condition)
110 #define _my_assertex(condition, file, line)
111 #define _my_warn(condition)
112 #define _my_warnex(condition, file, line)
113 #define _my_assert_info(condition, info)
114 #define _my_warn_info(condition, info)
115 
116 #endif /* USER_DEBUG */
117 
118 
119 
120 #endif /* __INCLUDE_BASE_DEBUG_H */
  1 /*
  2  *
  3  * base_endian.h
  4  *
  5  * 基本数据编码和转换函数定义。
  6  *
  7  * 本代码支持win32平台和linux平台。
  8  *
  9  * Copyright (c)2012,lizhi<ibox>
 10  *
 11  * 2012-10-10 V1.0 lizhi<QQ:252240557,msn:ddgooo@hotmail.com> created
 12  *
 13  */
 14 
 15 
 16 #ifndef __INCLUDE_BASE_ENDIAN_H
 17 #define __INCLUDE_BASE_ENDIAN_H
 18 
 19 
 20 /*
 21  * 头文件
 22  */
 23 #include "base_type.h"
 24 
 25 
 26 /*
 27  * Macro开关
 28  */
 29 #ifndef USER_ENDIAN
 30 #define USER_ENDIAN
 31 #endif
 32 
 33 
 34 #ifdef USER_ENDIAN
 35 
 36 /*
 37  * _my_hasbe - 判断主机顺序是否为大端;
 38  *
 39  * 返回TRUE: 主机顺序为大端,否则为小端;
 40  *
 41  * h表示host,be表示big endian;
 42  *
 43  */
 44 int _my_hasbe(void);
 45 
 46 
 47 /*
 48  * _my_swpe16/_my_swpe32/_my_swpe64 - 交互端顺序;
 49  *
 50  * 如大端(Big-Endian)转换成小端(Little-Endian),或者小端转换成大端
 51  *
 52  */
 53 #define _my_swpe16(data)        ((((data) & 0xff00) >> 8) | (((data) & 0x00ff) << 8))
 54 #define _my_swpe32(data)        ((((data) & 0xff000000) >> 24)                          \
 55                                         | (((data) & 0x00ff0000) >> 8)                  \
 56                                         | (((data) & 0x0000ff00) << 8)                  \
 57                                         | (((data) & 0x000000ff) << 24))
 58 #define _my_swpe64(data)        ((((data) & (u64)(0xff00000000000000)) >> 56)           \
 59                                         | (((data) & (u64)(0x00ff000000000000)) >> 40)  \
 60                                         | (((data) & (u64)(0x0000ff0000000000)) >> 24)  \
 61                                         | (((data) & (u64)(0x000000ff00000000)) >> 08)  \
 62                                         | (((data) & (u64)(0x00000000ff000000)) << 08)  \
 63                                         | (((data) & (u64)(0x0000000000ff0000)) << 24)  \
 64                                         | (((data) & (u64)(0x000000000000ff00)) << 40)  \
 65                                         | (((data) & (u64)(0x00000000000000ff)) << 56))
 66 
 67 /*
 68  * _my_btohN/_my_htobN - 主机字节顺序与大端顺序间的相互转换;
 69  *
 70  * h表示host,be表示big endian;
 71  *
 72  */
 73 #define _my_btoh16(data)        ( _my_hasbe() ? (data) : _my_swpe16(data))
 74 #define _my_btoh32(data)        ( _my_hasbe() ? (data) : _my_swpe32(data))
 75 #define _my_btoh64(data)        ( _my_hasbe() ? (data) : _my_swpe64(data))
 76 #define _my_htob16(data)        (_my_btoh16(data))
 77 #define _my_htob32(data)        (_my_btoh32(data))
 78 #define _my_htob64(data)        (_my_btoh64(data))
 79 /*
 80  * _my_btolN/_my_ltobN - 主机字节顺序与小端顺序间的相互转换;
 81  *
 82  * h表示host,l表示little endian;
 83  *
 84  */
 85 #define _my_ltoh16(data)        ((!_my_hasbe()) ? (data) : _my_swpe16(data))
 86 #define _my_ltoh32(data)        ((!_my_hasbe()) ? (data) : _my_swpe32(data))
 87 #define _my_ltoh64(data)        ((!_my_hasbe()) ? (data) : _my_swpe64(data))
 88 #define _my_htol16(data)        (_my_ltoh16(data))
 89 #define _my_htol32(data)        (_my_ltoh32(data))
 90 #define _my_htol64(data)        (_my_ltoh64(data))
 91 /*
 92  * _my_htonN/_my_ntohN - 主机字节顺序与网络字节顺序间的相互转换;
 93  *
 94  * h表示host,n表示net;
 95  *
 96  */
 97 #define _my_hton16(data)        (_my_htob16(data))
 98 #define _my_hton32(data)        (_my_htob32(data))
 99 #define _my_hton64(data)        (_my_htob64(data))
100 #define _my_ntoh16(data)        (_my_btoh16(data))
101 #define _my_ntoh32(data)        (_my_btoh32(data))
102 #define _my_ntoh64(data)        (_my_btoh64(data))
103 
104 /*
105  * _my_getXN - 按字节顺序取值;
106  *
107  */
108 #define _my_get8(p)             ((p)[0])
109 #define _my_getl16(p)           (((p)[0]) | (((p)[1]) << 8))
110 #define _my_getb16(p)           (((p)[1]) | (((p)[0]) << 8))
111 #define _my_getl32(p)           (((p)[0]) | (((p)[1]) << 8) | (((p)[2]) << 16) | (((p)[3]) << 24))
112 #define _my_getb32(p)           (((p)[3]) | (((p)[2]) << 8) | (((p)[1]) << 16) | (((p)[0]) << 24))
113 #define _my_getl64(p)           (((p)[0]) | (((p)[1]) << 8) | (((p)[2]) << 16) | (((p)[3]) << 24)       \
114                                         | (((p)[4]) << 32) | (((p)[5]) << 40) | (((p)[6]) << 48) | (((p)[7]) << 56))
115 #define _my_getb64(p)           (((p)[7]) | (((p)[6]) << 8) | (((p)[5]) << 16) | (((p)[4]) << 24)       \
116                                         | (((p)[3]) << 32) | (((p)[2]) << 40) | (((p)[1]) << 48) | (((p)[0]) << 56))
117 #define _my_geth16(p)           (_my_hasbe() ? _my_getb16(p) : _my_getl16(p))
118 #define _my_geth32(p)           (_my_hasbe() ? _my_getb32(p) : _my_getl32(p))
119 #define _my_geth64(p)           (_my_hasbe() ? _my_getb64(p) : _my_getl64(p))
120 
121 #define _my_getl24(p)           (((p)[0]) | ((p)[1] << 8)| ((p)[2] << 16))
122 #define _my_getb24(p)           (((p)[0] << 24) | ((p)[1] << 16) | ((p)[2] << 8))
123 #define _my_geth24(p)           (_my_hasb_chk() ? _my_getb24(p) : _my_getl24(p))
124 
125 
126 
127 
128 #endif /* USER_ENDIAN */
129 
130 
131 #endif /* __INCLUDE_BASE_ENDIAN_H */
 1 /*
 2  *
 3  * base_function.h
 4  *
 5  * 基本函数及宏定义。
 6  *
 7  * 本代码支持win32平台和linux平台。
 8  *
 9  * Copyright (c)2012,lizhi<ibox>
10  *
11  * 2012-10-10 V1.0 lizhi<QQ:252240557,msn:ddgooo@hotmail.com> created
12  *
13  */
14 
15 
16 #ifndef __INCLUDE_BASE_FUNCTION_H
17 #define __INCLUDE_BASE_FUNCTION_H
18 
19 
20 /*
21  * Macro开关
22  */
23 #ifndef USER_FUNCTION
24 #define USER_FUNCTION
25 #endif
26 
27 
28 /*
29  * Macro开关
30  */
31 #ifdef USER_FUNCTION
32 
33 
34 /*
35  * 内存申请
36  */
37 #define _my_buf_malloc(size)            malloc(size)
38 #define _my_buf_free(ptr)               free(ptr)
39 
40 /*
41  * min/max - 数学比较(非标准库函数)
42  */
43 #define _my_min(x, y)                   ((x) <= (y) ? (x) : (y))
44 #define _my_max(x, y)                   ((x) >= (y) ? (x) : (y))
45 
46 /*
47  * 字符\字符串处理函数(非标准库函数)
48  *
49  * strupr/strlwr - 转换大小写
50  *
51  */
52 char * _my_strupr(char *str);
53 char * _my_strlwr(char *str);
54 
55 
56 #endif /* USER_FUNCTION */
57 
58 #endif /* __INCLUDE_BASE_FUNCTION_H */
 1 /*
 2  *
 3  * base_endian.c
 4  *
 5  * 基本数据编码和转换函数定义。
 6  *
 7  * 本代码支持win32平台和linux平台。
 8  *
 9  * Copyright (c)2012,lizhi<ibox>
10  *
11  * 2012-10-10 V1.0 lizhi<QQ:252240557,msn:ddgooo@hotmail.com> created
12  *
13  */
14 
15 
16 /*
17  * 头文件
18  */
19 #include "base_type.h"
20 #include "base_include.h"
21 #include "base_debug.h"
22 #include "base_function.h"
23 #include "base_endian.h"
24 
25 
26 /*
27  * _my_hasbe - 判断主机顺序是否为大端;
28  *
29  * 返回TRUE: 主机顺序为大端,否则为小端;
30  *
31  */
32 int _my_hasbe(void)
33 {
34         u16 data = 0x0001;
35         u8* p = (u8*)(&data);
36         return ((u8)(*p) == 0x01) ? FALSE : TRUE;
37 }
 1 /*
 2  *
 3  * base_function.c
 4  *
 5  * 基本函数及宏定义。
 6  *
 7  * 本代码支持win32平台和linux平台。
 8  *
 9  * Copyright (c)2012,lizhi<ibox>
10  *
11  * 2012-10-10 V1.0 lizhi<QQ:252240557,msn:ddgooo@hotmail.com> created
12  *
13  */
14 
15 
16 /*
17  * 头文件
18  */
19 #include "base_type.h"
20 #include "base_include.h"
21 #include "base_debug.h"
22 #include "base_endian.h"
23 
24 
25 
26 /*
27  * 字符\字符串处理函数(非标准库函数)
28  *
29  * strupr/strlwr - 转换大小写
30  *
31  */
32 char * _my_strupr(char *str)
33 {
34         char *p = str;
35         while (*p != '\0') {
36                 if(*p >= 'a' && *p <= 'z'){
37                         *p -= 0x20;
38                 }
39                 p++;
40         }
41         return str;
42 }
43 /*
44  * 字符\字符串处理函数(非标准函数)
45  *
46  * strupr/strlwr - 转换大小写
47  *
48  */
49 char * _my_strlwr(char *str)
50 {
51         char *p = str;
52         while (*p != '\0') {
53                 if(*p >= 'A' && *p <= 'Z'){
54                         *p += 0x20;
55                 }
56                 p++;
57         }
58         return str;
59 }
原文地址:https://www.cnblogs.com/lizhi0755/p/2740050.html