Chinaunix首页 | 论坛 | 博客
  • 博客访问: 457381
  • 博文数量: 42
  • 博客积分: 1325
  • 博客等级: 中尉
  • 技术积分: 1312
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-13 18:00
个人简介

呵~~~呵~~~

文章分类

全部博文(42)

文章存档

2016年(3)

2015年(1)

2014年(2)

2013年(2)

2012年(7)

2011年(11)

2010年(3)

2009年(13)

我的朋友

分类: C/C++

2016-09-02 16:10:48

C语言中,可以用大括号“{}”将语句组合,构成“语句块”。
而在GNU C扩展中,用括号“()”将“语句块”括起来也形成了“语句表达式”,形式为“({ ...; ...; ...;})”。
语句表达式的值等于最后一个语句的值
例如:
  1. d = ({ a = 2; b = 4; c = a + b;});
  2. printf( "d=%d\n", d);
输出结果: d=6

下面的代码,通过语句表达式来模拟实现构造、析构函数,以获取一些结构初始化的便利。

一、宏定义一个new关键字:
  1. #define new(__cname, ...) ({ \
  2.     struct __cname * ci = (struct __cname *)malloc(sizeof(struct __cname));} \
  3.     if( ci != NULL) { \
  4.         ci->constructor = constructor; \
  5.         ci->destructor = destructor; \
  6.         ci = ci->constructor( ci, ##__VA_ARGS__); \
  7.     } \
  8.     ci = ci; \
  9. })

  10. #define delete( __instance) ( \
  11.     __instance->destructor( __instance); \
  12.     free(__instance); \
  13. )
*注:这里用到了语句表达式,宏"new"的值等于ci。ci分配错误为NULL时,"new"的值也等于NULL。

二、在.h中定义带构造函数的结构体:
  1. struct vf_resource{

  2.     ......

  3.     struct vf_resource * (* constructor)( struct vf_resource *_this, ...); // 构造函数
  4.     void *                    destructor( struct vf_resource *_this);      // 析构函数
  5. }vf_resource_t;

  6. struct vf_resource * (* constructor)( struct vf_resource *_this, ...);
  7. void * destructor( struct vf_resource *_this);

三、在.c中应用:
  1. struct vf_resource *vfr = new( struct vf_resource);
END.


阅读(865) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~