-
如何解决if(a+b<0)的溢出问题?>本来不想用逻辑运算符的,结果没想出来,只有折个中了
if (b == INT_MIN || a < -b)
- static是解决名字冲突的利器。
- 反复地检查边界条件,这是个好习惯。
- 为什么va_arg(ap, type)的type不能是char、short或float?
离开以后
C Traps and Pitfalls笔记
yayj 发表于 2005-10-23 20:33:22
Koeing在讲这个宏时是直接使用type的长度来调整ap指针的,而栈是按4字节对齐的, 则char和 short类型的参数是转成int,float转成double来压入堆栈,所以当使用这几个类型时,va_arg调整ap指针时就会出错。但现在的 stdarg.h中可以使用__va_size(type)宏来计算对齐后的字节数,所以还是可以使用这些类型。不过gcc会对这个用法给出警告,并在 va_arg宏处设置一个int 指令,暂时还没想到gcc为什么会这么做。
你会为一把菜刀增加一个保护手指的装置吗
yayj 发表于 2005-10-23 16:16:40
"C程序设计语言"练习题解答(Updating...)
yayj 发表于 2005-10-22 20:32:12
#include <string.h> int strrindex(char *s, char * t) { int i, j, k; int sl = strlen(s), tl = strlen(t); if (sl <> return -1; for (i = sl - 1; i >= tl - 1; --i) { for (j = i, k = tl - 1; k > 0 && s[j] == t[k]; --j, --k) ; if (k == 0 && s[j] == t[k]) return i - tl + 1; } return -1; } #include <ctype.h> double atof(char *s) { double val, power1, power2; int i, j, bsign, psign; for (i = 0; isspace(s[i]); ++i) ; bsign = (s[i] == '-') ? -1 : 1; if (s[i] == '+' || s[i] == '-') ++i; for (val = 0.0; isdigit(s[i]); ++i) val = 10.0 * val + (s[i] - '0'); if (s[i] == '.') ++i; for (power1 = 1.0; isdigit(s[i]); ++i) { val = 10.0 * val + (s[i] - '0'); power1 *= 10.0; } if (s[i] == 'e' || s[i] == 'E') { psign = (s[++i] == '-') ? 1 : 0; if (s[i] == '+' || s[i] == '-') ++i; for (j = 0, power2 = 1.0; j < (int)atof(s + i); ++j) power2 *= 10.0; if (psign) power1 *= power2; else power1 /= power2; } return bsign * val / power1; } 没做.....第4章 函数与程序结构
"C程序设计语言"读书笔记(Updating...)
yayj 发表于 2005-10-22 16:38:49
若函数的声明为fun(),那么编译器将对fun关闭所有的参数检查,这种特殊处理是为了使新的编译器能编译比较老的C语言程序,实际中是应该避免的。 在不显式初始化的情况下,编译器将外部变量和静态变量初始化为0,但不会初始化自动变量和寄存器变量。 全局变量/函数对整个程序的各个部分都可见,而全局静态变量/函数仅在声明它的文件内可见,其它文件都无法访问。 第4章 函数与程序结构
外部变量和静态变量的初始化表达式必须是常量表达式,而自动变量和寄存器变量的初始化表达式可以包含其它变量。
thunderbird的bug
yayj 发表于 2005-10-16 20:56:33
它始终是直接与pop服务器建立连接,不知怎么修改。
前几天重起了久违的thunderbird,发现开发小组已经修正了这个bug了。我现在用的版本是1.0.6中文版。
firefox的一些常用设置
yayj 发表于 2005-10-16 20:55:19
- Google搜索控件的修改:
打开about:config页面,查找到browser.search.param.Google.1.custom和browser.search.param.Google.1.default两项,将它两个的值都设置为空
- 始终在新标签中打开
打开about:config页面,查找到browser.link.open_newwindow选项,将值设为3
- 比较有用的extensions:
FlashGot: 一个支持多个下载工具的管理器。
SwitchProxy: 管理代理的工具。
GooglePreview: 在Google的搜索页面中预览搜索结果。
ForecastFox: 提供天气预报的小工具,它的汉化版不错。
GmailNotifier: 顾名思义,建议Gmail的用户使用。
SessionSaver: 可以保存关闭Firefox前的所有tab。
Sage: RSS阅读器。
