免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ccku
打印 上一主题 下一主题

请教#define 的高级用法! [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
21 [报告]
发表于 2008-02-22 11:04 |只看该作者
原帖由 flw 于 2008-2-22 10:50 发表
看 11 楼



11 楼的做法不能解决实际的问题啊。

我从数据库中取一个数据结构定义出来,然后需要动态的产生一个数据结构变量。再对这个数据结构变量、进行操作。

举例如下:
我的一个 table 的结构如下:

tablename   userinfo {
          name        char(,
          sex           smallint
};

这个数据结构不是固定的,可能在某个时候,我需要在数据表中增加一个字段 id ,数据类型是整形的。

那么,我原来定义的数据结构是:

struct userinfo {
        char      name[8];
        short    sex;
};

现在变成了
struct  userinfo {
        char      name[8];
        short    sex;
        int         id;
};

但这个数据结构我希望是动态产生,而不是静态的,或者说是在程序运行时根据具体的条件来产生,而不是在程序编译时产生,这样的话,客户需求发生改变的时候,我的程序可以不用发生修改,或者不用进行大的修改。

论坛徽章:
0
22 [报告]
发表于 2008-02-22 11:13 |只看该作者

回复 #21 snow888 的帖子

malloc

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
23 [报告]
发表于 2008-02-22 11:20 |只看该作者
可以参考 Win32 ODBC 的做法,
定义一个叫做 DB_VAL 的 struct{DB_TYPE type; union{}value; },然后根据 type 字段来确定如何解析 value。
这样你前面那个 struct userinfo 就可以变成数组 struct DB_VAL userinfo[MAX_FIELDS];
别觉得失望,C 语言就是这样,没有银弹。
或者你改投 Perl?我欢迎你。

其实 Perl 也是一样,只不过 Perl 把你想要做的事替你做好了而已。它内部走的也是我上面说的这个流程。
事情就那么多事情,你不想做,就得有个人替你做。

论坛徽章:
0
24 [报告]
发表于 2008-02-22 11:21 |只看该作者
定义一个field的数据结构:
struct field {
    char *name;
    void *value;
};

然后userinfo定义为:
struct userinfo {
    struct fields[MAX_FIELD];
};

这样可能扩展性上面会比较好一点,userinfo的fields也可以定义成不定数组或者用
一个链表

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
25 [报告]
发表于 2008-02-22 11:21 |只看该作者

回 23 楼 fly 老大

这个思路,做法很郁闷哎。

perl 能解决这个方面的问题???

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
26 [报告]
发表于 2008-02-22 11:26 |只看该作者
原帖由 snow888 于 2008-2-22 11:21 发表
这个思路,做法很郁闷哎。

perl 能解决这个方面的问题???

郁闷啥,事情就那么多事情,你不做就得有人替你做。不要幻想,不要浮躁,实际一点,做事就会踏实许多。
Perl 能解决这个问题。

[ 本帖最后由 flw 于 2008-2-22 11:48 编辑 ]

论坛徽章:
0
27 [报告]
发表于 2008-02-22 11:29 |只看该作者
原帖由 flw 于 2008-2-22 11:26 发表
郁闷啥,事情就那么多事情,不要幻想,不要浮躁,实际一点,做事就会踏实许多。


呵呵,支持~~~~

论坛徽章:
0
28 [报告]
发表于 2008-02-22 11:37 |只看该作者
原帖由 flw 于 2008-2-22 11:26 发表

郁闷啥,事情就那么多事情,不要幻想,不要浮躁,实际一点,做事就会踏实许多。


呵呵 这句话得加精华!

论坛徽章:
0
29 [报告]
发表于 2008-02-22 11:46 |只看该作者
奥运中国

论坛徽章:
0
30 [报告]
发表于 2008-02-23 15:00 |只看该作者
原帖由 flw 于 2008-2-22 11:26 发表

郁闷啥,事情就那么多事情,你不做就得有人替你做。不要幻想,不要浮躁,实际一点,做事就会踏实许多。
Perl 能解决这个问题。


刚刚工作, 深有体会,强烈支持!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP