C語言之三聯符

2021-06-20 19:33:09 字數 676 閱讀 7628

考察如下 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 包含我們的標頭...