考察如下 c 程式:
??=include
int main()??
你可能看著會覺得很奇怪, 然而這卻是一段合法的 c 程式, 我在 vc2008 中嘗試編譯並成功.
實際上, 三聯符序列就是以 ?? 開頭的三個字元, 用來對某個其它字元進行指定替換, 替換規則如下表:
三聯符替換
??=#
??/\
??』^
??([
??)]
??!|
??<
??-~
現在就可以解釋很久以前某人遇到過的乙個奇怪問題了:
//?? blah blah ??/
printf("hello world!\n");
以上程式中沒有任何輸出. 這個問題曾被群討論歸結為 vc6 的 bug, vc6 的確有很多 bug, 不過很可惜, 這不是其中的乙個.
解釋:??/ 被替換成\ ,而反斜槓表示斷行,所以最開始的//連printf行一起注釋掉了。
1994 年 c 語言標準的乙個修訂增加了二聯符序列, 現在已經被包含到 c99 中, 二聯符序列的對應規則如下:
二聯符替換
<:
[:>
]<%%:#
不過據我所知, 大部分編譯器還不支援二聯符序列, 包括我正在使用的 vc2008.
原文連線:
c語言之操作符
c語言的操作符主要有8種 算數操作符,移位操作符,位操作符,賦值操作符,單目操作符,關係操作符,邏輯操作符,條件操作符。1 算數操作符 主要有 可以作用於整數和浮點數,而 只能作用於整數,返回的是整除之後的餘數。2 移位操作符 主要有左移 右移 左移規則 左邊拋棄,右邊補零,有乘2的效果 右移規則 ...
C 基礎語言之(三C 中四種cast轉換)
說起型別轉換,我們常見的就是c中的隱式型別轉換和顯式型別轉換 1.隱式型別轉換 隱式轉換就是系統預設的 不需要加以宣告就可以進行的轉換。在隱式轉換過程中,編譯器無需對轉換進行詳細檢查就能夠安全地執行轉換。int i 1 float f i 2.顯式型別轉換 強制型別轉換 區別在於當向下轉換時如果不顯...
C語言之三字棋的實現及擴充套件
一.檔案組成 在我們學習的過程中,我們要逐漸習慣多檔案的書寫方式,也就是模組化書寫。1.game.h 實現遊戲函式的宣告 2.game.c 遊戲函式的實現 3.test.c 測試及遊戲函式的呼叫 二.實現 0.檔案的初始化 在這裡我們分別在我們所建立的 test.c 和 game.c 包含我們的標頭...