先看一下“一种很有效的组织小汉字库的方法”中#define的用法:
定义宏:
定义结构体:
字模的存储用数组:
乍一看,可能会以为这里是#define的什么专用,看不楚程序。其实这里的#define和平时我们用到的一样,也就是在预编译时进行宏展开,那么我们对原程序进行宏替换就可以了知道这里#define的真正含义了:
# define EX_FONT_CHAR(value) 定义“EX_FONT_CHAR(value)”为空,在实际的应用中相当于注释
# define EX_FONT_UNICODE_VAL(value) (value), 定义“EX_FONT_UNICODE_VAL(value)” 为“(value),” 加上括号是防止value参与运算,这里要注意“(value)”后面的逗号“,”并没有错,宏展开时此逗号正好放在了正确的位置上。
个人感觉#define用于程序注释这种用法不好,降低了程序的可读性,上面的
EX_FONT_CHAR("业")
EX_FONT_UNICODE_VAL(0x4e1a)
改成:
/*"业"*/
0x4e1a,/*"业"的内码(EX_FONT_UNICODE_VAL)*/
更好。
PS:百度快照真是太好了,因为它可以看到被GWF掉的GOOGLE快照。
定义宏:
# define EX_FONT_CHAR(value) # define EX_FONT_UNICODE_VAL(value) (value), # define EX_FONT_ANSI_VAL(value) (value), |
typedef struct _wide_unicode_font16x16 { WORD value; /* 内码 */ BYTE data[32]; /* 字模点阵 */ }Unicode; #define CHINESE_CHAR_NUM … /* 汉字数量 */ |
Unicode chinese[CHINESE_CHAR_NUM] = { { EX_FONT_CHAR("业") EX_FONT_UNICODE_VAL(0x4e1a) {0x04, 0x40, 0x04, 0x40, 0x04, 0x40, 0x04, 0x44, 0x44, 0x46, 0x24, 0x4c, 0x24, 0x48, 0x14, 0x50, 0x1c, 0x50, 0x14, 0x60, 0x04, 0x40, 0x04, 0x40, 0x04, 0x44, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00} }, { EX_FONT_CHAR("中") EX_FONT_UNICODE_VAL(0x4e2d) {0x01, 0x00, 0x01, 0x00, 0x21, 0x08, 0x3f, 0xfc, 0x21, 0x08, 0x21, 0x08, 0x21, 0x08, 0x21, 0x08, 0x21, 0x08, 0x3f, 0xf8, 0x21, 0x08, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00} }, { EX_FONT_CHAR("云") EX_FONT_UNICODE_VAL(0x4e91) {0x00, 0x00, 0x00, 0x30, 0x3f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xff, 0xfe, 0x03, 0x00, 0x07, 0x00, 0x06, 0x40, 0x0c, 0x20, 0x18, 0x10, 0x31, 0xf8, 0x7f, 0x0c, 0x20, 0x08, 0x00, 0x00} }, { EX_FONT_CHAR("件") EX_FONT_UNICODE_VAL(0x4ef6) {0x10, 0x40, 0x1a, 0x40, 0x13, 0x40, 0x32, 0x40, 0x23, 0xfc, 0x64, 0x40, 0xa4, 0x40, 0x28, 0x40, 0x2f, 0xfe, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40} } } |
乍一看,可能会以为这里是#define的什么专用,看不楚程序。其实这里的#define和平时我们用到的一样,也就是在预编译时进行宏展开,那么我们对原程序进行宏替换就可以了知道这里#define的真正含义了:
# define EX_FONT_CHAR(value) 定义“EX_FONT_CHAR(value)”为空,在实际的应用中相当于注释
# define EX_FONT_UNICODE_VAL(value) (value), 定义“EX_FONT_UNICODE_VAL(value)” 为“(value),” 加上括号是防止value参与运算,这里要注意“(value)”后面的逗号“,”并没有错,宏展开时此逗号正好放在了正确的位置上。
个人感觉#define用于程序注释这种用法不好,降低了程序的可读性,上面的
EX_FONT_CHAR("业")
EX_FONT_UNICODE_VAL(0x4e1a)
改成:
/*"业"*/
0x4e1a,/*"业"的内码(EX_FONT_UNICODE_VAL)*/
更好。
PS:百度快照真是太好了,因为它可以看到被GWF掉的GOOGLE快照。