C Traps and Pitfalls笔记

yayj 发表于 2005-10-23 20:33:22

  1. 如何解决if(a+b<0)的溢出问题?>本来不想用逻辑运算符的,结果没想出来,只有折个中了
    if (b == INT_MIN || a < -b)

  2. static是解决名字冲突的利器。
  3. 反复地检查边界条件,这是个好习惯。
  4. 为什么va_arg(ap, type)的type不能是char、short或float?

Koeing在讲这个宏时是直接使用type的长度来调整ap指针的,而栈是按4字节对齐的, 则char和 short类型的参数是转成int,float转成double来压入堆栈,所以当使用这几个类型时,va_arg调整ap指针时就会出错。但现在的 stdarg.h中可以使用__va_size(type)宏来计算对齐后的字节数,所以还是可以使用这些类型。不过gcc会对这个用法给出警告,并在 va_arg宏处设置一个int 指令,暂时还没想到gcc为什么会这么做。

关键词(Tag): c 人模狗样


收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定