成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一行注釋也能影響運行結果?

開發 后端
沒想到吧,一行注釋也能影響運行結果!也許你在某個段子里聽說過,某行注釋刪掉后,程序竟然不能預期執行?真的會這樣么?你還別不信。

沒想到吧,一行注釋也能影響運行結果!

也許你在某個段子里聽說過,某行注釋刪掉后,程序竟然不能預期執行?真的會這樣么?你還別不信。

[[320558]]

見證“奇跡”

  1. #include <stdio.h> 
  2. #include <math.h> 
  3. int main(void) 
  4.     int a = (int)sqrt(30); 
  5.     //is sqrt(30) + 1 > 5 ??/ 
  6.     //故意讓a++,你別管為什么 
  7.    a++; 
  8.    if(a > 5) 
  9.        printf("sqrt(30) +1 > 5 \n"); 
  10.    else 
  11.    { 
  12.        printf("sqrt(30) +1 <= 5 \n"); 
  13.    } 
  14.    return 0; 

編譯運行:

  1. $ gcc -o main main.c -trigraphs 
  2. $ ./main 
  3. sqrt(30) +1 > 5  

作為受過九年義務教育的我們,一看就知道結果是對的,畢竟 5 * 5 < 30 < 6 * 6。

但是刪掉第九行,再運行:

  1. $ ./main 
  2. sqrt(30) +1 <= 5  

結果竟然變了!!

看到這里,細心的讀者可能已經發現了其中的端倪,我也就不賣關子了。接下來就說說我們本次要提到的主角-三字符組(trigraph sequences)。

三字符組

我們都知道C語言里面有很多轉義符號,例如:

  1. \n 換行符(LF) 
  2. \r 回車符(CR) 
  3. \t 水平制表符(HT) 
  4. \b 退格符(BS) 
  5. \’ 單引號 
  6. \” 雙引號 
  7. \\ 反斜杠 
  8. ...... 

當然還有很多,我就不一一列舉了。這些符號在代碼中都有特別的作用,或者無法直接輸入,因此用轉移符+其他字符組合來代替。

同樣的,早期的一些鍵盤可能沒法輸入一些特殊的符號,如:

  1. # $ @ [ \ ] ^ ` { | } ~  

于是,為了解決這個問題C語言標準規定預處理器(C preprocessor)在掃描處理C語言源文件時,替換下述的3字符出現為1個字符:

也就是說,??/會被替換為\,如果刪掉原先的第九行,就變成了:

  1. //is sqrt(30) + 1 > 5 \ 
  2. a++; 

我們都知道,\的存在(通常一行代碼太長,可以通過該符號來換行),使得上面看似兩行,實則是一行。即變成了:

  1. //is sqrt(30) + 1 > 5 a++; 

也就是說,a++根本不會執行了,當然會導致最終結果不符合預期。

當然了,很多現代編譯器可能并不會做這樣的替換,所以這樣的問題也基本無需擔心,老實用原本的符號即可。

實際上,細心的讀者可能觀察到了,我在前面例子代碼中加了編譯選項-trigraphs,否則的話,編譯是有警告的:

  1. $ gcc -o main main.c 
  2. main.c: In function ‘main’: 
  3. main.c:6:27: warning: trigraph ??/ ignored, use -trigraphs to enable [-Wtrigraphs] 
  4.      //is sqrt(30) + 1 > 5 ??/ 

雙字符組

除了三字符組,還有雙字符組。

總結

今天的你不知道很難踩坑,知道了也沒啥用的內容就介紹到這里了。

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

2020-02-28 15:27:31

代碼開發工具

2022-03-21 17:54:52

Linux操作系統瀏覽器

2024-08-01 09:57:17

DELETE死鎖工具

2024-07-04 00:30:17

2016-12-02 08:53:18

Python一行代碼

2020-08-05 11:53:41

數據代碼自動化

2021-09-13 10:14:28

代碼開發命令

2022-04-11 11:38:44

Python代碼游戲

2012-02-23 13:43:54

小米手機Windows XP

2020-08-24 08:25:48

Python開發工具

2014-02-12 13:43:50

代碼并行任務

2022-04-09 09:11:33

Python

2017-04-05 11:10:23

Javascript代碼前端

2011-08-25 09:17:31

Java調用存儲過程返回一行或多行結果集

2022-02-08 22:18:10

Chrome插件服務器

2018-01-02 09:26:28

Ubuntuzzupdate版本升級

2020-08-19 10:30:25

代碼Python多線程

2020-09-09 16:00:22

Linux進程

2021-11-02 16:25:41

Python代碼技巧

2021-10-19 17:52:16

Git命令算數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品欧美一区喷水 | 欧洲尺码日本国产精品 | 99精品在线观看 | 久久99精品久久久久婷婷 | 国产精品国产成人国产三级 | 国产在线高清 | 91在线精品视频 | 久久久久久国产精品免费免费狐狸 | 久久躁日日躁aaaaxxxx | 一区免费看| 热久久999 | 国产一级在线视频 | 91国自产| 中文字幕av在线一二三区 | 欧美日韩一卡 | 亚洲精品一区中文字幕乱码 | 精品在线播放 | 国产成人精品久久久 | 岛国av在线免费观看 | 成人精品鲁一区一区二区 | 午夜私人影院在线观看 | 国产精品国产三级国产aⅴ中文 | 超碰伊人 | 黄色a级一级片 | 欧美日韩在线一区二区三区 | 一区二区不卡视频 | 国产一区| 久草99| 日本一区二区三区视频在线 | 韩国精品一区 | 精品成人免费视频 | 亚洲欧洲av在线 | 天天干天天爱天天 | 日韩免费av| 一区二区影视 | 免费精品视频在线观看 | 国产成人免费在线 | 国产精品久久久久久久久久久久午夜片 | 精品视频一区二区在线观看 | 91佛爷在线观看 | 日韩成人精品视频 |