#define用于程序注释

来源:互联网 发布:js点击按钮显示时间 编辑:程序博客网 时间:2024/04/30 23:23
 先看一下“一种很有效的组织小汉字库的方法”中#define的用法:

  定义宏:
# 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快照。