- 论坛徽章:
- 0
|
先把最近更新的代码发上来,对gcc平台做了详尽的测试,基本上是可以用在项目中了。对未知编译器(纯ANSI C)的支持因为还没有来得及详细测试,尚未包含。
主要更新有:
增加了对c99变长数组和alloca()的支持,在有两者其一的支持下,用户不需要指定栈的大小(大多数平台上都有alloca函数);
缺省做自动栈复制或值提交功能,用户一般不再需要使用SLOT_REUSE_LOCAL_VAR(...),SLOT_COMMIT_LOCAL_VAR()等宏来显式复制变量或值;
用户可以通过一些宏来配置上述选项,见config.h;
其他一些修正,代码优化,更多安全性检查,通用性增强等方便使用。
示例代码:
#include <stdio.h>
#include "sigslot.h"
void connect(struct __Signal *signal)
{
int i = 5;
float j = 10.0;
SLOT *slot = (SLOT *)malloc(sizeof(SLOT));
SLOT_FETCH_LOCAL_VAR3(slot, slot, i, j);
SIGNAL_CONNECT(signal, slot
, (
printf("int=%d, float=%f\n", i, j);
)
, (
SLOT_FREE(slot);
free(slot);
)
);
}
int main(int argc, char *argv[])
{
SIGNAL2(int, float) signal;
SLOT slot;
SLOT_INIT(&slot);
SIGNAL_INIT(&signal);
connect((struct __Signal *)&signal);
SIGNAL_CONNECT(&signal, &slot
, (
printf("int=%d, float=%f\n", signal._1, signal._2);
)
, ()
);
SIGNAL2_EMIT(&signal, 5, 10);
SIGNAL2_EMIT(&signal, 50, 100);
SIGNAL_DISCONNECT(&signal, &slot);
SIGNAL_FREE(&signal);
return 0;
}
对于SLOT_REUSE_LOCAL_VAR,SLOT_LOCAL_VAR,SLOT_UPDATE_LOCAL_VAR等宏的命名上我觉得有些歧义,如果用HOST_VAR代替LOCAL_VAR会不会好些,望各位指点一二,先就此谢过! |
|