自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C語言迷惑行為大賞

開發(fā) 后端
為什么不會輸出公眾號呢?原因在于標準輸入默認是行緩沖,而標準錯誤是無緩沖。這在《那些奇奇怪怪的緩沖問題》中已經(jīng)有解釋了。

代碼0:

  1. #include<stdio.h> 
  2. int main(void) 
  3.     int c = 5
  4.     switch(c) 
  5.     { 
  6.         case 0 ... 10: 
  7.             printf("0-->10\n"); 
  8.             break; 
  9.         case 11 ... 20: 
  10.             printf("11-->20\n"); 
  11.             break; 
  12.         default: 
  13.             printf("other\n"); 
  14.     } 
  15.     return 0; 

輸出結果:

  1. 0-->10 

以上特性被常見編譯器支持,但是標準中并未提到。

代碼1

  1. #include<stdio.h> 
  2. int main(void) 
  3.     printf("%m\n"); 
  4.     return 0; 

輸出結果:

  1. Success 

等價于:

  1. printf("%s\n",stderr(errno)); 

由于你的代碼前面并沒有執(zhí)行出錯設置errno,因此errno會是0,而對應的描述信息就是Success。

代碼2

  1. #include<stdio.h> 
  2. int main(void) 
  3.     int i = 10
  4.     printf("%zu\n",sizeof(i++)); 
  5.     printf("%zu\n",sizeof(++i)); 
  6.     printf("%d\n",i); 
  7.     return 0; 

輸出結果:

  1. 10 

sizeof實際作用的對象是類型。sizeof中的表達式本身并不會被執(zhí)行。

代碼3

  1. #include <stdio.h> 
  2. #include <unistd.h> 
  3. int main(void)   
  4.     while(1) 
  5.     { 
  6.         fprintf(stdout,"公眾號"); 
  7.         fprintf(stderr,"編程珠璣"); 
  8.         sleep(10); 
  9.     } 
  10.     return 0; 

輸出結果:

  1. 編程珠璣編程珠璣編程珠璣 

為什么不會輸出公眾號呢?原因在于標準輸入默認是行緩沖,而標準錯誤是無緩沖。這在《那些奇奇怪怪的緩沖問題》中已經(jīng)有解釋了。

代碼4

  1. #include <stdio.h> 
  2. int main(void)   
  3.     int a = 10
  4.     switch(a) 
  5.     { 
  6.         int b = 20
  7.         case 10: 
  8.             printf("%d\n",a + b); 
  9.             break; 
  10.         default: 
  11.             printf("%d\n",a + b); 
  12.             break; 
  13.     } 
  14.     return 0; 

輸出結果:

  1. 10 

switch中的int b = 20,并不會被執(zhí)行,你編譯時就會發(fā)現(xiàn)有警告。

代碼4

  1. #include <stdio.h> 
  2. int main(void)   
  3.     printf("%c\n",4["hello 公眾號編程珠璣"]); 
  4.     return 0; 

輸出結果:

等價于:

  1. char *str = "hello 公眾號編程珠璣"
  2. printf("%c\n",str[4]); 

代碼5

  1. //來源:公眾號編程珠璣 
  2. //https://www.yanbinghu.com 
  3. #include<stdio.h> 
  4. int main(void) 
  5.     char arr[] = {'h','e','l','l','o'}; 
  6.     printf("%s\n",arr);//災難!,可能會崩潰 
  7.     return 0; 

代碼6

沒啥用,還會core dump的超短代碼,可以編譯運行:

  1. main=0

代碼7

  1. #include<stdio.h> 
  2. int main(void) 
  3.     int arr[] = {5,4,3,2,1}; 
  4.     for(int i = -1; i < sizeof(arr)/sizeof(int) - 1; i++) 
  5.     { 
  6.         printf("%d\n",arr[i+1]); 
  7.     } 
  8.     printf("end\n"); 
  9.     return 0; 

輸出結果:

  1. end 

原因也很簡單,sizeof(arr)/sizeof(int)的結果是unsigend, int類型的i 和unsigned比較,被轉(zhuǎn)換為一個很大的unsigned數(shù),所以for循環(huán)的條件不滿足。

代碼8

  1. #include<stdio.h> 
  2. test() 
  3.     long b = 12345678987654321
  4.     return b; 
  5. int main(void) 
  6.     long a = test(); 
  7.     printf("%ld\n",a); 
  8.     return 0; 

輸出結果:

  1. 1653732529 

代碼9

  1. #include<stdio.h> 
  2. int main(void) 
  3.     float a = 3
  4.     int b = 2
  5.     printf("%d\n",a/2); 
  6.     return 0; 

輸出結果:

  1. 1199094392 

原因:浮點數(shù)在計算機中按照IEEE754標準存儲

 

責任編輯:趙寧寧 來源: 編程珠璣
相關推薦

2024-06-07 08:41:19

2023-06-01 07:48:03

Solidjsx??React?

2013-12-12 14:04:28

C編程語言

2020-05-28 08:34:38

疫情人工智能AI

2009-09-03 10:26:07

C#修改DataRea

2011-06-20 14:42:45

2011-07-05 16:57:53

C語言

2011-07-05 17:07:14

C語言

2022-04-25 21:50:09

前端JS面試題

2010-01-15 17:38:37

C++語言

2011-12-07 09:44:42

云計算李開復

2011-12-12 13:22:51

CocoaObjective-C

2012-01-16 08:51:28

PaaS云計算

2010-01-14 10:34:02

C++語言

2011-03-25 15:15:29

2021-04-21 08:09:50

iOSApp設計iPhone

2013-12-19 09:56:46

開源Simon Phipp

2012-01-06 10:20:36

MetroWindows 8

2009-08-03 16:28:53

Java語言與C#語言

2011-10-24 09:42:00

C語言
點贊
收藏

51CTO技術棧公眾號