免费注册 查看新帖 |

Chinaunix

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

绝对够有难度的代码upgrading问题。。。 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-05-31 01:06 |只看该作者

  1. #define LOG (printf("%s:%d\n",__FILE__,__LINE__),log)
复制代码

把一切调用log(priority,...)函数的地方改为LOG(priority,...)

论坛徽章:
0
12 [报告]
发表于 2006-05-31 08:27 |只看该作者
原帖由 emacsnw 于 2006-5-31 01:06 发表

  1. #define LOG (printf("%s:%d\n",__FILE__,__LINE__),log)
复制代码

把一切调用log(priority,...)函数的地方改为LOG(priority,...)

如你所说,用宏就可以解决一切问题,
首先改 log 函数为
  1. newlog( const char *fillename, int lineno, int priority, const char* fmt, ... )
复制代码

然后定义宏:
  1. #define log(...) newlog( __FILE__, __LINE__, __VA_ARGS__ )
复制代码

这样所有调用 log 的地方都不用动,
只不过新的 log 不再是函数,而是宏。

BTW:为什么要把函数名叫做 log?我编译的时候报了个这样的错误给我:
  1. warning: conflicting types for built-in function 'log'
复制代码

[ 本帖最后由 莫愁 于 2006-5-31 08:36 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2006-05-31 10:08 |只看该作者
原帖由 isnowran 于 2006-5-31 01:02 发表
[code]
char cBuf[128];
#define syslog( x, y )\
        bzero( cBuf, sizeof( cBuf ) );\
        sprintf( cBuf, "%s %i %s", __FILE__, __LINE__, y );\
        syslog( x, cBuf )

int m ...


你这个方法不对,注意syslog是变参,向你这样改,只能适用一个而且是字符串类型的参数。。。

论坛徽章:
0
14 [报告]
发表于 2006-05-31 10:09 |只看该作者
原帖由 emacsnw 于 2006-5-31 01:06 发表

  1. #define LOG (printf("%s:%d\n",__FILE__,__LINE__),log)
复制代码

把一切调用log(priority,...)函数的地方改为LOG(priority,...)


这个方法需要写个脚本把说有的log改为LOG...

论坛徽章:
0
15 [报告]
发表于 2006-05-31 10:21 |只看该作者
原帖由 莫愁 于 2006-5-31 08:27 发表

如你所说,用宏就可以解决一切问题,
首先改 log 函数为
  1. newlog( const char *fillename, int lineno, int priority, const char* fmt, ... )
复制代码

然后定义宏:
[code]#define log(...) newlog( _ ...


这个方法相对比较好,但是也要把所有的原来的log接口都改为newLog....
不过已经很cool了。。。高。。。

还有没有改动更少的方法。。。
因为我们系统里还有一些自定义的一个log接口,比如sysLogMsg(MSG_CODE id, char* ),
sysLogMsg( MSG_CODE id, char*, char* ), sysLogMsg( MSG_CODE, int )..等等。。。
如果按照你的方法,需要在写同样数量的newLog函数接口。。。

论坛徽章:
0
16 [报告]
发表于 2006-05-31 10:46 |只看该作者
原帖由 HeavenTear 于 2006-5-31 10:21 发表


这个方法相对比较好,但是也要把所有的原来的log接口改为newLog....
不过已经很cool了。。。高。。。

还有没有改动更少的方法。。。
因为我们系统里还有一些自定义的一个log接口,比如sysLogMsg(MSG_C ...

什么叫“都”?
调用的地方一概都不用改呀!
只需要改定义和声明的地方就行了呀!
换句话说,
只需要改原来 log 函数所在的 .c 和对应的 .h 就行了,
这已经是最低限度了呀。

论坛徽章:
0
17 [报告]
发表于 2006-05-31 10:47 |只看该作者
不是让你重写同样数量,
而是把原来的函数改个名字,因为宏和函数不能重名。

论坛徽章:
0
18 [报告]
发表于 2006-05-31 12:13 |只看该作者
谢谢莫愁

论坛徽章:
0
19 [报告]
发表于 2006-05-31 12:30 |只看该作者
其实如果能改函数定义本身最好了。。。

论坛徽章:
0
20 [报告]
发表于 2006-05-31 14:06 |只看该作者
原帖由 星尘细雨 于 2006-5-31 12:30 发表
其实如果能改函数定义本身最好了。。。

不好,因为:
1,改定义不改接口,不解决问题。
1,改接口,那么所有调用的地方就都得改。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP