关于 if,switch,do while ,for 你不知道的那点小事
2013-09-01 11:33
127 查看
零,先总结:
1、if 语句适用于 按区域进行判断的情形
2、switch 适用于离散值进行判断的情形
3、
一、if 条件语句中要注意的
0、if 条件语句中,真值true 用非0表示;false 用0表示
1、bool 型变量应该直接出现于条件中,不要进行比较;原因是,bool值是由不同的编译器厂商自行定义的;它的值有可能是-1,也有可能是1 或其他,所以bool的真值是一个不确定的数,所以不要让bool型变量和其他值比较,直接用就好
2、工程开发上,约定俗成的,把0 或其他常数写在==左边;这样做主要是防止手误把 == 写成=
3、float型变量不能直接进行0值比较,需要定义精度;eg
P.S. 扩展,事实上,当浮点型变量和任意一个常数比较时,最好也是以区间+精度的形式来表示,eg :
二、多路分支 switch
1、语法
(1)case语句中的值只能是整型或字符型
(2)为了方便日后程序的维护和可读性,通常将case语句中的常量 按:字母或数字顺序排列
(3)default 语句必须有用于处理默认情况
2、switch 语句的缺点
(1)由于case语句只能是常量,所以当条件是一个范围的时候,switch 语句就失效了。此时只能用if
================================================================================
循环语句
零,先总结:
1、do 语句先执行后判断,循环体至少执行一次
2、while 语句先判断后执行,循环体可能不执行
3、for 语句先判断后执行,相比while跟简洁
一、do while 的妙用,使用do while 来统一一段代码的出口(且保证该代码一定能从此出口出去)
1、样例1、
样例1有两个问题
(1)函数出口太多(多个return),不简洁
(2)内存泄露;考虑情况,当n < 0时,由于malloc 支持负数(malloc认为负数是一个极大的数,因为他的形参是:unsigned int),所以P != NULL。这种情况就会产生内存泄露了。
2、样例2
分析这样做的好处
1、使用do while(0) +break,保证函数的出口只有一个,且所有分支必须要通过此出口,这样不但函数形式简洁,且也保证了 free函数一定会执行,防止内存泄露
1、if 语句适用于 按区域进行判断的情形
2、switch 适用于离散值进行判断的情形
3、
一、if 条件语句中要注意的
0、if 条件语句中,真值true 用非0表示;false 用0表示
1、bool 型变量应该直接出现于条件中,不要进行比较;原因是,bool值是由不同的编译器厂商自行定义的;它的值有可能是-1,也有可能是1 或其他,所以bool的真值是一个不确定的数,所以不要让bool型变量和其他值比较,直接用就好
2、工程开发上,约定俗成的,把0 或其他常数写在==左边;这样做主要是防止手误把 == 写成=
3、float型变量不能直接进行0值比较,需要定义精度;eg
#define EPSINON 0.000000001 float f = 0.0 if( (-EPISON <= f) && (f <= EPISON)) //把f锁定在无限接近0的一个区间内 { ..... } { ..... }
P.S. 扩展,事实上,当浮点型变量和任意一个常数比较时,最好也是以区间+精度的形式来表示,eg :
#define EPSION 0.00000001 float f = 5.0; if( ( 5 - EPSION=<f) && ( f >= 5 + EPSION) ) { }
二、多路分支 switch
1、语法
(1)case语句中的值只能是整型或字符型
(2)为了方便日后程序的维护和可读性,通常将case语句中的常量 按:字母或数字顺序排列
(3)default 语句必须有用于处理默认情况
2、switch 语句的缺点
(1)由于case语句只能是常量,所以当条件是一个范围的时候,switch 语句就失效了。此时只能用if
================================================================================
循环语句
零,先总结:
1、do 语句先执行后判断,循环体至少执行一次
2、while 语句先判断后执行,循环体可能不执行
3、for 语句先判断后执行,相比while跟简洁
一、do while 的妙用,使用do while 来统一一段代码的出口(且保证该代码一定能从此出口出去)
1、样例1、
int func( int n ) { int i = 0; int * p = (int * )malloc(sizeof(int)*n); if(NULL == p) return 0; if(n < 0) return 0; //do something here //......... free(p) return 1; }
样例1有两个问题
(1)函数出口太多(多个return),不简洁
(2)内存泄露;考虑情况,当n < 0时,由于malloc 支持负数(malloc认为负数是一个极大的数,因为他的形参是:unsigned int),所以P != NULL。这种情况就会产生内存泄露了。
2、样例2
int func( int n ) { int i = 0; int * p = (int * )malloc(sizeof(int)*n); do { if(NULL == p) break; if(n < 0) break; //do something here //......... }while(0); free(p) ret = 1; return 1; }
分析这样做的好处
1、使用do while(0) +break,保证函数的出口只有一个,且所有分支必须要通过此出口,这样不但函数形式简洁,且也保证了 free函数一定会执行,防止内存泄露
相关文章推荐
- swift中流程控制:for in、while、do while、if、switch、continue、break...
- JAVA之旅(二)——if,switch,for,while,do while,语句嵌套,流程控制break , continue ,函数,重载的示例总结
- JS:1.2控制语句(if,if else,for,switch,while,do while)
- JAVA之旅(二)——if,switch,for,while,do while,语句嵌套,流程控制break , continue ,函数,重载的示例总结
- Java语言基础(程序流程控制-if、switch、for、while、do while、break、continue)
- 3、C语言流程控制 if...else、switch、for、while、do while
- c++中的结构化语句 判断语句if 分支语句switch 循环语句 while 和 do while 循环语句for的使用
- JS:1.2,控制语句(if,if else,for,switch,while,do while)
- java程序流程控制,if语句,switch语句,while语句,do while语句,for 语句,break关键字,continue关键字
- 黑马程序员—Java语言基础(程序流程控制-if、switch、for、while、do while、break、continue)
- 分支语句(if,switch case)、循环(for,while,do while)、continue、break、随机数
- (二) php if语句,switch语句,continue语句,return语句,for 、while、do while 循环
- 第一章 C++ 我来了——1.3 关于注释 & 1.4 While, For and If
- 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
- 实现1+2+3...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
- 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
- 求1+2+3+...+n,要求不能使用乘,除,for ,while,if ,else ,switch,case
- for/while和if/switch
- GO 学习笔记 (二) for , if , switch
- 计算1-n的和(不用for, while, goto, if, else, switch, case和三目运算符, 也不用乘除法)---利用多态性