偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

一行注釋也能影響運行結(jié)果?

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

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

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

[[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  

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

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

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

結(jié)果竟然變了!!

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

三字符組

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

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

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

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

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

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

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

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

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

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

也就是說,a++根本不會執(zhí)行了,當(dāng)然會導(dǎo)致最終結(jié)果不符合預(yù)期。

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

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

雙字符組

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

總結(jié)

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

責(zé)任編輯:趙寧寧 來源: 編程珠璣
相關(guān)推薦

2020-02-28 15:27:31

代碼開發(fā)工具

2022-03-21 17:54:52

Linux操作系統(tǒng)瀏覽器

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

數(shù)據(jù)代碼自動化

2021-09-13 10:14:28

代碼開發(fā)命令

2022-04-11 11:38:44

Python代碼游戲

2012-02-23 13:43:54

小米手機Windows XP

2020-08-24 08:25:48

Python開發(fā)工具

2014-02-12 13:43:50

代碼并行任務(wù)

2022-04-09 09:11:33

Python

2017-04-05 11:10:23

Javascript代碼前端

2011-08-25 09:17:31

Java調(diào)用存儲過程返回一行或多行結(jié)果集

2022-02-08 22:18:10

Chrome插件服務(wù)器

2018-01-02 09:26:28

Ubuntuzzupdate版本升級

2020-08-19 10:30:25

代碼Python多線程

2020-09-09 16:00:22

Linux進(jìn)程

2021-11-02 16:25:41

Python代碼技巧

2021-10-19 17:52:16

Git命令算數(shù)
點贊
收藏

51CTO技術(shù)棧公眾號