免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2883 | 回复: 16
打印 上一主题 下一主题

[函数] 可变参数伤害了我,怎么避免这种情况? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-17 12:45 |只看该作者 |倒序浏览
我写了一个函数xxx_log ( const char *fmt,  ... ), 该函数一直表现良好,值得发奖状,但是今天,它给我背后下刀子了。。。

xxx_log ( "%s, %d i am a log. and a very long info.......\n"
  __FILE__, __LINE__ );

乍看上去这代码没有问题吧,编绎也没有任何警告和错误。我是开了Wall的。但是,程序一运行到这里就segment fault。我一步步调试,花了非常长的时间才发现我少写了一个“,”。这个项目我已经写了近一万行代码了,就漏了这一次。

怎么写才能避免这种情况再次出现????我要编绎的时候就能检查出来

论坛徽章:
0
2 [报告]
发表于 2009-03-17 12:46 |只看该作者
我认为你已经记住了,不会再犯。

论坛徽章:
0
3 [报告]
发表于 2009-03-17 12:52 |只看该作者
不认真就得有损失,避免不了。

论坛徽章:
0
4 [报告]
发表于 2009-03-17 12:52 |只看该作者
我认为肯定还会有其它的犯的   

论坛徽章:
0
5 [报告]
发表于 2009-03-17 12:58 |只看该作者
原帖由 我learnc 于 2009-3-17 12:52 发表
我认为肯定还会有其它的犯的   

那你就等着出bug吧。
不知道splint能不能检查的出来。

论坛徽章:
0
6 [报告]
发表于 2009-03-17 13:04 |只看该作者
void xxx_log( const char *fmt, ... ) __attribute__((format(printf,1,2)));  这样声明函数,编译时加-Wall参数,这种情况就会给你警告了.
另外,这种问题至于一步步找很久么...挂的时候,加载CORE DUMP看调用栈不是就一目了然了吗

论坛徽章:
0
7 [报告]
发表于 2009-03-17 13:07 |只看该作者
这种问题,有过第一次后,第二次就不在话下了

论坛徽章:
0
8 [报告]
发表于 2009-03-17 13:53 |只看该作者
有的时候编码风格和习惯很重要,,
比如这段代码,曾经让我郁闷了半天
if( condition );
  func();

因为以前写的时候,碰到短的if语句我就写在一行,结果就出现上面的问题,func()永远都被条件忽略。。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2009-03-17 14:15 |只看该作者
垃圾代码。
我从来不自己手敲 __FILE__, __LINE__,都是用宏自动扩展。

论坛徽章:
0
10 [报告]
发表于 2009-03-17 14:33 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP