关于一段正则表达式的奇怪代码。谁能给解释一下噢。

quentinliu 2010-11-10 10:22:21
在研究 wxWidget的时候。发现其中正则表达式很多函数都用的类似的写法



VOID
wx_regfree(re)
regex_t *re;
{
if (re == NULL)
return;
(*((struct fns *)re->re_fns)->free)(re);
}


放狗搜索了一下。发现这好像是linux下 正则表达式移植过来的。那我大牛说一下这是怎么回事噢。
感觉明显不符合c的语法啊。。但是可以正常编译运行通过。
...全文
170 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
quentinliu 2010-11-10
  • 打赏
  • 举报
回复
知道了。。。主文件是 CPP。。多谢多谢结贴了。。。
quentinliu 2010-11-10
  • 打赏
  • 举报
回复
刚刚发现了。。。改成/TC就通过了


不过发现原版的是用默认的编译的。就是TP啊。。


不过多谢mLee老大了。。我在查查看。。
mLee79 2010-11-10
  • 打赏
  • 举报
回复
你不会是当cpp编译的吧.. 这是C代码 ...
quentinliu 2010-11-10
  • 打赏
  • 举报
回复
不要沉底啊。。。郁闷了。。。

求指教
quentinliu 2010-11-10
  • 打赏
  • 举报
回复

#ifdef __cplusplus
extern "C" {
#endif

#ifndef VOID
#define VOID void /* for function return values */
#endif



typedef struct
{
int nText_a;
int nText_b;
int n_cbsize;
}regex_t;
#define _ANSI_ARGS_(x) x
typedef void re_void;
re_void wx_regfree _ANSI_ARGS_((regex_t *));

#ifdef __cplusplus
}
#endif




#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "test.h"



VOID
wx_regfree(re)
regex_t *re;
{
if (re == NULL)
return;
}

int main()
{
return 0;
}


mlee大牛。。我拆开这样写。编译通不过。。。能否指点下哪里有问题噢。。
mLee79 2010-11-10
  • 打赏
  • 举报
回复
C的K&R远古时期, C声明只写返回值, 不写参数地, 函数参数就是这个写法, 参数类型/返回值默认类型int...

_ANSI_ARGS_ 的声明应该是这样子...

#ifdef __ANSI__ ???
#define _ANSI_ARGS_(x) x
#else
#define _ANSI_ARGS_(x)
#endif

是许多开源项目的标准写法, 习惯了就好...

quentinliu 2010-11-10
  • 打赏
  • 举报
回复

VOID
wx_regfree(re)
regex_t *re;
{
...
}

一楼的大牛。我说的主要是这一部分。。。哎。考虑了好久想不通。
quentinliu 2010-11-10
  • 打赏
  • 举报
回复
不会吧。。。。0.0



typedef void re_void;
#define _ANSI_ARGS_(x) x
re_void wx_regfree _ANSI_ARGS_((regex_t *));


拆一拆感觉不应该能跑啊。。。。能否解释清楚一点噢
mLee79 2010-11-10
  • 打赏
  • 举报
回复
很显然符合标准C语法, 还是正宗的K&R, 还有些古董公司编程规范要求函数指针调用必须写成 (*pf)() , 而不能写成 pf() ...

70,026

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧