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

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

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

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

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

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

編譯運(yùn)行:

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

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

但是刪掉第九行,再運(yùn)行:

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

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

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

三字符組

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

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

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

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

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

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

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

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

我們都知道,\的存在(通常一行代碼太長(zhǎng),可以通過(guò)該符號(hào)來(lái)?yè)Q行),使得上面看似兩行,實(shí)則是一行。即變成了:

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

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

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

實(shí)際上,細(xì)心的讀者可能觀察到了,我在前面例子代碼中加了編譯選項(xiàng)-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é)任編輯:趙寧寧 來(lái)源: 編程珠璣
相關(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ù)代碼自動(dòng)化

2021-09-13 10:14:28

代碼開發(fā)命令

2022-04-11 11:38:44

Python代碼游戲

2020-08-24 08:25:48

Python開發(fā)工具

2012-02-23 13:43:54

小米手機(jī)Windows XP

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)用存儲(chǔ)過(guò)程返回一行或多行結(jié)果集

2022-02-08 22:18:10

Chrome插件服務(wù)器

2018-01-02 09:26:28

Ubuntuzzupdate版本升級(jí)

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ù)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 久久视频精品在线 | 欧州一区二区三区 | 一区二区三区国产 | 国产精品视频一二三区 | 三级视频在线观看电影 | 日韩在线播放第一页 | 欧美日韩精品一区二区三区四区 | 九九综合九九 | 欧美一级免费看 | 国产精品久久av | 99re视频在线免费观看 | 成人免费视频一区 | 日本 欧美 三级 高清 视频 | 麻豆a级片 | 欧美另类视频 | 玖玖玖在线观看 | 亚洲欧美一区二区三区国产精品 | 精品国产乱码久久久久久88av | 国产日韩精品一区 | 欧美一级二级在线观看 | 亚洲精品456 | 一级中国毛片 | 精品视频在线一区 | 亚洲欧美视频一区 | 国产乱码精品1区2区3区 | 亚洲国产aⅴ精品一区二区 免费观看av | 国产精品久久 | 久久综合九色综合欧美狠狠 | 国产成人精品久久二区二区91 | 国产欧美一区二区精品久导航 | 国产精品成人一区二区 | 一级黄色影片在线观看 | 日韩一区二区福利 | 97av在线| 人人人艹 | 中文在线a在线 | 天天艹 | 99精品欧美一区二区三区 | 精品欧美一区二区在线观看 | 国产精品久久在线观看 | 欧美日韩理论 |