打印

郁闷的宏定义实现不了

[复制链接]
2820|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 | 只看该作者
给你个提示:线性表+排序+二分法查找

使用特权

评论回复
5
again_gyf|  楼主 | 2010-1-25 19:44 | 只看该作者
楼上你仔细看我的问题哦!

使用特权

评论回复
6
again_gyf|  楼主 | 2010-1-25 19:51 | 只看该作者
我要实现以下功能
1、定义一个新宏
#define FONT_0xCED2 (1)
2、#define FONT_ANSI_VAL(x)  (这里根据x参数替换为上面已定义的宏)
3、在程序用FONT_ANSI_VAL("我")

使用特权

评论回复
7
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)就可以了!
但汉字该怎么实现

使用特权

评论回复
8
mohanwei| | 2010-1-26 08:25 | 只看该作者
我的意思是,你这种方式跟直接引用:
char *ptr="我";
有什么区别呢,这种代码是很难维护的类型……
你不如把自己用到的汉字集中到一张表里,做成索引:char *ChineseTab="我要吃肉";
显示的时候用二分法(跟逐次比较ADC类似)搜索一下即可

使用特权

评论回复
9
HWM| | 2010-1-26 09:04 | 只看该作者
宏是编译前的“文本替代”功能。合不合理要看替代后是否能过编译的语法关(即词法和句法的检验)。按楼主意识,看下例:

#define   prefix_(postfix)  ABC_##postfix

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

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

问题在那里便一目了然。

使用特权

评论回复
10
computer00| | 2010-1-26 09:11 | 只看该作者
还是查表吧~~~方便

使用特权

评论回复
11
again_gyf|  楼主 | 2010-1-26 09:23 | 只看该作者
本帖最后由 again_gyf 于 2010-1-26 09:26 编辑

char prefix_(我); 呢?
呵呵,看样子这个宏是写不成了!

使用特权

评论回复
12
again_gyf|  楼主 | 2010-1-26 09:24 | 只看该作者
我不想用搜索了,本来目的想通过宏直接来定位

使用特权

评论回复
13
again_gyf|  楼主 | 2010-1-26 09:34 | 只看该作者
目前使用的是引用字是用宏如要用“我”为HZ_0xCED2
然后用C#写一个生成具体定位的宏

使用特权

评论回复
14
HWM| | 2010-1-26 09:39 | 只看该作者
11# again_gyf


你说

char ABC_我;

是否符合C的词法?

使用特权

评论回复
15
again_gyf|  楼主 | 2010-1-26 09:45 | 只看该作者
enum Font24x24Enum
{
  FONT24x24_0xBAC3=1,  //好
  FONT24x24_0xC3C7,  //们
  FONT24x24_0xC4E3,  //你
  FONT24x24_0xCED2,  //我

  FONT24x24_END
};

使用特权

评论回复
16
mohanwei| | 2010-1-26 11:16 | 只看该作者
15楼的代码跟下面代码比起来哪个好维护呢:
LCD_Disp( 0,//第0行
                  0,//第0列
                  "1-参数设置",//待显示的字符串
                  DISP_CENTER|DISP_CLEAR_HEAD|DISP_CLEAR_TAIL);//显示居中,清头,清尾
就算菜单多复杂,就算没有注释,后来的维护者也会很容易看懂、修改代码,因为代码就是注释。

使用特权

评论回复
17
again_gyf|  楼主 | 2010-1-26 12:00 | 只看该作者
其实呢可以做全字库的,反正偶空间M级的,我只是想能不能实现这样的宏,要方便还是全字库了

使用特权

评论回复
18
again_gyf|  楼主 | 2010-1-26 12:01 | 只看该作者
任何东西都是要权衡的

使用特权

评论回复
19
again_gyf|  楼主 | 2010-1-26 12:03 | 只看该作者
一般不会在调用里字节写字的,这样多国语言怎么实现呢!我现在的系统类是MTK手机的MMI

使用特权

评论回复
20
lxyppc| | 2010-1-26 12:22 | 只看该作者
楼主这个要求单凭宏定义很难完成
但是如果肯用一下Excel,问题会简单很多

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

630

帖子

0

粉丝