C和指针 第五章 警告总结

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

 2.移位操做的位数是个负数,是未定义的编译器

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

#include <stdio.h>

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

	return 0;
}

  编译器提示:编译

  

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

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

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

  

#define FALSE  0
#define TRUE   1

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

if(flag)
{
}

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

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

  若是某个操做符的各个操做数属于不一样的类型,那么除非其中一个操做数转换为另一个操做数的类型,不然操做数没法进行。img

  

寻常算术转换
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.编写结果依赖于求值顺序的表达式

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

  操做符的优先级

  操做符的结合性

  操做符是否控制执行顺序

  操做符的优先级决定了相邻的操做符哪一个先被执行,若是优先级相等,那么结合性决定执行顺序,

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

相关文章
相关标签/搜索