码迷,mamicode.com
首页 > 其他好文 > 详细

第五章 警告总结

时间:2016-08-14 14:43:19      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

 1.有符号的值得右移位操作是不可移植的

 2.移位操作的位数是个负数,是未定义的

 3.连续赋值的各个变量的长度 不一,导致变量值截断。

#include <stdio.h>

int main()
{
	char chr_num;
	int  int_num;
     //截断
	int_num = chr_num = 100000;

	return 0;
}

  编译器提示:

  技术分享

   4.条件语句勿用=代替==

   5.勿用 | 代替||, & 代替 &&

   6.不同的用于表示布尔值非零值之间进行比较。

  

#define FALSE  0
#define TRUE   1

//如果flag为任意整型值,那么下面两个语句是不等价的
if(flag == TRUE)
{
}

if(flag)
{
}

  避免混合使用整型值和布尔值

  7.表达式赋值的位置并不决定表达式的计算精度。

  如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数转换为另外一个操作数的类型,否则操作数无法进行。

  

寻常算术转换
long double
double 
float 
unsigned long int
long int
unsigned int
int

  如果某个操作数排名较低,那么它首先转换为另外一个操作数的类型,然后执行操作。

例如 在16位的机器上

int a = 5000;
int b = 100;
long c = a * b;

会发生溢出,需要将a * b的结果转换为长整型。

int a = 5000;
int b = 100;
long c = (long) a * b;

  8.编写结果依赖于求值顺序的表达式

  表达式的求值顺序由三个因素影响:

  操作符的优先级

  操作符的结合性

  操作符是否控制执行顺序

  操作符的优先级决定了相邻的操作符哪个先被执行,如果优先级相等,那么结合性决定执行顺序,

  但是,这些并不能完全决定表达式的求值顺序,编译器只要不违背优先级和结合性规则,可以自由决定复杂表达式的求值顺序。所以如果,表达式的结果依赖于求值顺序,那么,本质上是不可移植的,避免使用。

第五章 警告总结

标签:

原文地址:http://www.cnblogs.com/yangxunwu1992/p/5770075.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!