日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
一行注釋也能影響運行結果?

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

創(chuàng)新互聯(lián)建站從2013年成立,是專業(yè)互聯(lián)網技術服務公司,擁有項目成都網站建設、做網站網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元莒南做網站,已為上家服務,為莒南各地企業(yè)和個人服務,聯(lián)系電話:18982081108

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

見證“奇跡”

 
 
 
 
  1. #include  
  2. #include  
  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  

結果竟然變了!!

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

三字符組

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

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

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

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

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

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

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

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

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

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

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

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

實際上,細心的讀者可能觀察到了,我在前面例子代碼中加了編譯選項-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 ??/ 

雙字符組

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

總結

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


當前題目:一行注釋也能影響運行結果?
網頁網址:http://www.dlmjj.cn/article/dhegocc.html