Zhang Jiuan’ Notes

判断语句的思考

版权声明:http://hi.baidu.com/learncpp/blog/item/d2a7b42b04384afbe7cd4064.html
“4.3 if 语句
if 语句是C++/C 语言中最简单、最常用的语句,然而很多程序员用隐含错误的方式
写if 语句。本节以“与零值比较”为例,展开讨论。
4.3.1 布尔变量与零值比较
l 【规则4-3-1】不可将布尔变量直接与TRUE、FALSE 或者1、0 进行比较。
根据布尔类型的语义,零值为“假”(记为FALSE),任何非零值都是“真”(记为TRUE)。TRUE 的值究竟是什么并没有统一的标准。例如Visual C++ 将TRUE 定义为1,而Visual Basic 则将TRUE 定义为-1。
假设布尔变量名字为flag,它与零值比较的标准if 语句如下:
if (flag) // 表示flag 为真
 

if (!flag) // 表示flag 为假
 
其它的用法都属于不良风格,例如:
if (flag == TRUE)
if (flag == 1 )
if (flag == FALSE)
if (flag == 0)
4.3.2 整型变量与零值比较
l 【规则4-3-2】应当将整型变量用“==”或“!=”直接与0 比较。
假设整型变量的名字为value,它与零值比较的标准if 语句如下:
if (value == 0)
if (value != 0)
不可模仿布尔变量的风格而写成
if (value) // 会让人误解 value 是布尔变量
if (!value)
4.3.3 [...]

关于’\0′, NULL和0的总结

一段字符串拷贝的代码,相来了相关朋友的讨论,本人感到十分开心。因为许于许多细节上,应该讨论越多,对问题的本质认识就越清楚。现在笔者把相关讨论专门总结为一篇日志。
经过:
首先笔者写了字符串拷贝的代码,没有经过调试,也存在bug和效率问题,如下:
char * strlcpy(char *dest, const char *src, size_t dest_buf_size)
{
    int i = 0;
    int src_len = 0;
   
    if (NULL == dest || NULL == src) {
        return NULL;
    }
    src_len = strlen(src);
   
    for (i = 0; i < src_len && i < dest_buf_size; i++) {
        dest[i] = src[i];
    }
    if (i == dest_buf_size) {
        dest[dest_buf_size [...]

关于0和NULL的思考(转载)

本人转载:http://hi.baidu.com/learncpp/blog/item/d2a7b42b04384afbe7cd4064.html
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://bigwhite.blogbus.com/logs/4738221.html
C程序员和C++程序员在声明空指针时做法常常是不相同的。
C程序员常常如下做:
int *ptr = NULL;
C++程序员则是听从Bjarne Stroustrup或者其他C++大师的教诲,坚定地如下做:
int *ptr = 0;
也许没有谁对谁错之分,也许只是习惯不同罢了,毕竟C语言是老大哥,诞生的早;而在早期C编程时人们也许不习惯在程序里使用0这样的magic number,转而使用了#define NULL ((void*)0)来统一进行空指针的声明或者赋值。
在’Effective C++’中明确提出避免使用使用macro的issue,广大C++信徒自然也就将NULL抛掷脑后,并逐渐形成习惯,用0给指针赋值以意会这是个空指针的方式就流传了下来。
还是那句话没有谁对谁错,在’The C++ Programming Language Special Edition’中Bjarne Stroustrup在5.1.1小节用了不到200个words来说明了关于’0′或NULL的问题,这段叙述也是堪称经典,我们可以来回顾一下:
Zero(0) is an int. Because of standard conversions, 0 can be used as a constant of any integral, floating-point, pointer, or pointer-to-member type. The type of zero will be determined by context. Zero(0) will typically (but not necessarily) be represented [...]

家里机器重装了XP系统

    前两天被老婆装了两个更新,应该是一些非正版用户会有异常的更新吧,结果导制系统不能正常运行了。也没有相应的恢复点,原本想着重新使盘repair一下就可以了,可最后系统启来后,无论如何一些驱动都不能正常启动,结果就是声音启动不了,鼠标也使不了,最后决定重装系统。
    在重装系统的过程中,也遇到了一些问题,系统应是好的,而且有两张。不过无论使哪张,总是装到一半系统自动关闭,可能是这台电脑哪些硬件有些异常问题了。最后竟鬼使神差的使一张盘装了一半,使另一张盘接着装了系统:)
    经过几个小时的工作,最终系统可以正常运行了,打了补丁,装了软件,算是稳定了。
    看来非正版用户,系统更新的时候还是小心些。
    360推荐的更新,一般还是可以使的。
 
thx
张久安
If you enjoyed this post, make sure you subscribe to my RSS feed!

,

返回顶部