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.編寫結果依賴於求值順序的表達式

  表達式的求值順序由三個因素影響:

  操做符的優先級

  操做符的結合性

  操做符是否控制執行順序

  操做符的優先級決定了相鄰的操做符哪一個先被執行,若是優先級相等,那麼結合性決定執行順序,

  可是,這些並不能徹底決定表達式的求值順序,編譯器只要不違背優先級和結合性規則,能夠自由決定複雜表達式的求值順序。因此若是,表達式的結果依賴於求值順序,那麼,本質上是不可移植的,避免使用。

相關文章
相關標籤/搜索