第五章 逻辑错误
逻辑错误是指能通过编译,并且运行时也不会抛出异常的一种错误。
包含逻辑错误的程序是正确的程序,但是他们的表现往往和你希望的不太一样。
这一节所列出的是新手最最最常见的错误,希望大家铭记在心,切记避免这些错误。
1. 变量未初始化
建议:无论何时C语言声明变量时一定要初始化。
C语言
基本类型:指C语言内置的不包括Struct和Union的类型,如int,char,char*等
未初始化的基本类型局部变量的值是不确定的。
未初始化的基本类型全局变量的值在二进制层面的全为0
结构体/联合也符合上述规则(全局结构体的成员值置0,局部结构体的成员值不确定)
malloc出的空间值不确定,calloc出的空间值置0。
可利用memset完成空间置0操作。
C++语言
占位符
2. 混淆=与==
在 C/C++ 中, 赋值运算符 =
也具有返回值
返回值为赋值符右边的表达式的值
在有需要的时候 C/C++ 可以将这个值强制转换为逻辑值
if(a = 0){ // a = 0 返回值为 0, 强制转换为逻辑值 false
printf("Interesting"); // 不可能被执行
}
对于涉及常数的判定,可以将常数放在左边,让编译器检查。
if(0 = a); // 编译错误
if(0 == a); // OK
3. 对空指针解引用
占位符
3. 代码块结构混乱
占位符