企业录,供求信息免费发布平台
 
  首 页 企业名录 产品大全 商业机会 企业建站 我的办公室
手机站
易网站
企业名录
您当前位置是:商业机会 >> 商务服务 >> 软件开发 >> C++语言中宏列表介绍
C++语言中宏列表介绍 C++语言中宏列表介绍_西安达内科技_C++语言中宏列表介绍

点此浏览大图
公 司: 西安达内科技
发布时间:2014年07月03日
有 效 期:2014年12月30日
留言询价 加为商友
  联系信息 企业信息
西安达内 先生 (seo)
联系时,请说是在企业录看到的,谢谢!
电  话: 029-82222601
传  真:
手  机:
地  址: 中国陕西西安市陕西省西安市兴庆南路10号交大出版大厦6层
邮  编:
公司主页: http://xadnitpx2.qy6.com.cn(加入收藏)
公 司:西安达内科技

查看该公司详细资料

详细说明

    西安达内培训(http://www.xatarena.net)讲师表示,C中的一个惯用方法,是说有一个已命名的实体列表,需要为它们中的每一个建立函数,将它们中的每一个初始化,并在不同的代码模块中扩展它们的名字。这在Mozilla的源码中经常用到,我就是在那时学到这个技巧的。例如,在我去年夏天工作的那个项目中,我们有一个针对每个命令进行标记的宏列表。其工作方式如下:

#define FLAG_LIST(_)
_(InWorklist)
_(EmittedAtUses)
_(LoopInvariant)
_(Commutative)
_(Movable)
_(Lowered)
_(Guard)

它定义了一个FLAG_LIST宏,这个宏有一个参数称之为 _ ,这个参数本身是一个宏,它能够调用列表中的每个参数。举一个实际使用的例子可能更能直观地说明问题。假设我们定义了一个宏DEFINE_FLAG,如:

#define DEFINE_FLAG(flag) flag,
enum Flag {
None = 0,
FLAG_LIST(DEFINE_FLAG)
Total
};
#undef DEFINE_FLAG
对FLAG_LIST(DEFINE_FLAG)做扩展能够得到如下代码:

enum Flag {
None = 0,
DEFINE_FLAG(InWorklist)
DEFINE_FLAG(EmittedAtUses)
DEFINE_FLAG(LoopInvariant)
DEFINE_FLAG(Commutative)
DEFINE_FLAG(Movable)
DEFINE_FLAG(Lowered)
DEFINE_FLAG(Guard)
Total
};
接着,对每个参数都扩展DEFINE_FLAG宏,这样我们就得到了enum如下:

enum Flag {
None = 0,
InWorklist,
EmittedAtUses,
LoopInvariant,
Commutative,
Movable,
Lowered,
Guard,
Total
};
接着,我们可能要定义一些访问函数,这样才能更好的使用flag列表:

#define FLAG_ACCESSOR(flag)
bool is##flag() const {
return hasFlags(1 << flag);
}
void set##flag() {
JS_ASSERT(!hasFlags(1 << flag));
setFlags(1 << flag);
}
void setNot##flag() {
JS_ASSERT(hasFlags(1 << flag));
removeFlags(1 << flag);
}

FLAG_LIST(FLAG_ACCESSOR)
#undef FLAG_ACCESSOR

一步步的展示其过程是非常有启发性的,如果对它的使用还有不解,可以花一些时间在gcc –E上。


免责声明:以上所展示的信息由会员自行提供,内容的真实性、准确性和合法性由发布会员负责,www.qy6.com.cn对此不承担任何责任。如有侵犯您的权益,请来信通知删除。
该公司其他商业信息
 1 直接到第
5 条信息,当前显示第 1 - 5 条,共 1

机械 仪器 五金 电子 电工 照明 汽摩 物流 包装 印刷 安防 环保 化工 精细化工 橡胶塑料 纺织 冶金 农业 健康保养 建材 能源 服装 工艺品 家居用品 数码 家用电器 通讯产品 办公 运动、休闲 食品 玩具 商务 广告 展会
1 2 3 4 5 6 7 8 9 10 .. 联系人:西安达内 电话:029-82222601

关于我们 | 网站指南 | 广告服务 | 诚招代理 | 诚聘英才 | 付款方式 | (企业录)联系方式 | 友情链接 | 网站地图