郁闷的宏定义实现不了

[复制链接]
4297|22
 楼主| again_gyf 发表于 2010-1-25 13:33 | 显示全部楼层 |阅读模式
带参数的宏,主要这个参数是中文字,比如想取得汉字内码,再把内码转为字符串或者数字与另一个字符串拼接成一个新宏名
如汉字“我”内码为"0xced2",转为数字"52946"(或者0xced2)再与"FONT_"拼接成一个新宏名FONT_52946(或者FONT_0xced2)
这个宏怎么实现???
#define FONT_ANSI_VAL(x)  (FONT_##x)....
 楼主| again_gyf 发表于 2010-1-25 13:56 | 显示全部楼层
主要目的是把汉字弄一个新的标识
 楼主| again_gyf 发表于 2010-1-25 13:57 | 显示全部楼层
唯一的有规律的标识
mohanwei 发表于 2010-1-25 17:27 | 显示全部楼层
给你个提示:线性表+排序+二分法查找
 楼主| again_gyf 发表于 2010-1-25 19:44 | 显示全部楼层
楼上你仔细看我的问题哦!
 楼主| again_gyf 发表于 2010-1-25 19:51 | 显示全部楼层
我要实现以下功能
1、定义一个新宏
#define FONT_0xCED2 (1)
2、#define FONT_ANSI_VAL(x)  (这里根据x参数替换为上面已定义的宏)
3、在程序用FONT_ANSI_VAL("我")
 楼主| again_gyf 发表于 2010-1-25 19:54 | 显示全部楼层
如对ASCII码字符就很容易实现
#define FONT_A (1)
#define FONT_a (2)
#define FONT_ANSI_VAL(x)  (FONT_##x)
这样引用FONT_ANSI_VAL(A)就可以了!
但汉字该怎么实现
mohanwei 发表于 2010-1-26 08:25 | 显示全部楼层
我的意思是,你这种方式跟直接引用:
char *ptr="我";
有什么区别呢,这种代码是很难维护的类型……
你不如把自己用到的汉字集中到一张表里,做成索引:char *ChineseTab="我要吃肉";
显示的时候用二分法(跟逐次比较ADC类似)搜索一下即可
HWM 发表于 2010-1-26 09:04 | 显示全部楼层
宏是编译前的“文本替代”功能。合不合理要看替代后是否能过编译的语法关(即词法和句法的检验)。按楼主意识,看下例:

#define   prefix_(postfix)  ABC_##postfix

char prefix_(1);  // 文本替代后为:char ABC_1;

char prefix_("1"); // 文本替代后为:char ABC_"1";

问题在那里便一目了然。
computer00 发表于 2010-1-26 09:11 | 显示全部楼层
还是查表吧~~~方便
 楼主| again_gyf 发表于 2010-1-26 09:23 | 显示全部楼层
本帖最后由 again_gyf 于 2010-1-26 09:26 编辑

char prefix_(我); 呢?
呵呵,看样子这个宏是写不成了!
 楼主| again_gyf 发表于 2010-1-26 09:24 | 显示全部楼层
我不想用搜索了,本来目的想通过宏直接来定位
 楼主| again_gyf 发表于 2010-1-26 09:34 | 显示全部楼层
目前使用的是引用字是用宏如要用“我”为HZ_0xCED2
然后用C#写一个生成具体定位的宏
HWM 发表于 2010-1-26 09:39 | 显示全部楼层
11# again_gyf


你说

char ABC_我;

是否符合C的词法?
 楼主| again_gyf 发表于 2010-1-26 09:45 | 显示全部楼层
enum Font24x24Enum
{
  FONT24x24_0xBAC3=1,  //好
  FONT24x24_0xC3C7,  //们
  FONT24x24_0xC4E3,  //你
  FONT24x24_0xCED2,  //我

  FONT24x24_END
};
mohanwei 发表于 2010-1-26 11:16 | 显示全部楼层
15楼的代码跟下面代码比起来哪个好维护呢:
LCD_Disp( 0,//第0行
                  0,//第0列
                  "1-参数设置",//待显示的字符串
                  DISP_CENTER|DISP_CLEAR_HEAD|DISP_CLEAR_TAIL);//显示居中,清头,清尾
就算菜单多复杂,就算没有注释,后来的维护者也会很容易看懂、修改代码,因为代码就是注释。
 楼主| again_gyf 发表于 2010-1-26 12:00 | 显示全部楼层
其实呢可以做全字库的,反正偶空间M级的,我只是想能不能实现这样的宏,要方便还是全字库了
 楼主| again_gyf 发表于 2010-1-26 12:01 | 显示全部楼层
任何东西都是要权衡的
 楼主| again_gyf 发表于 2010-1-26 12:03 | 显示全部楼层
一般不会在调用里字节写字的,这样多国语言怎么实现呢!我现在的系统类是MTK手机的MMI
lxyppc 发表于 2010-1-26 12:22 | 显示全部楼层
楼主这个要求单凭宏定义很难完成
但是如果肯用一下Excel,问题会简单很多
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

630

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部