混乱你的代码
注:這只是覺得好玩,才發上來的,事實上并不實用,但或許看完能對C/C++的歷史典故多一點了解呵.
先看一個程序:
??=include <stdio.h>
int main()
??<
?printf("%s","hello,world.??/n");
?
?return 0;
??>
編譯運行,OK,輸出為hello,world.
為什么能夠這樣寫,這里涉及到一個字符集與字符編碼的問題.
我們知道現在的很多計算機用的是ASCII編碼,正常情況下,\0x41都是代表'A'.可是ISO/IEC 646規定的所謂的國際標準,
讓各國可以將本國的一些字符安排到原來的ASCII中,代替{}[]等字符所占據的位置.即在這些國家的機器里,就沒有了
我們程序中經常要用到的[] {} \等字符了.這里便存在一個問題,就是程序的顯示.例如假定某國以+替換了{ ,那么在程序中的{輸入變成了
+,程序的可讀性極差。當然,這個程序仍然能正常編譯運行,這和編譯器的解釋有關,記住編譯器只認識\0x..
于是一個補救辦法產生了,這就是由C標準委員會推出的“三聯符序列”。
三聯符序列用來表示那些缺少的字符。
??=? 表示 #?????)?? 表示]????? ??(?? 表示[
??!? 表示 |???? ??/?? 表示\????? ??-?? 表示~
??>? 表示 }???? ??<?? 表示(??? ??'?? 表示^
這樣可讀性要好些了。不過以增加了源文件的字節長度為代價。
而一些C++的設計者們認為這樣的方案還不夠友好,于是C++中又引入一些“替換記號”。
<%替{????? and替&&?? ?and_eq替&=
%>替}??? bitor替|?? or_eq替|=
<:替[??? or替||???? xor_eq替^=
:>替]??? xor替^???not替!
%:替#??? compl替~??not_eq替!=
%:%:替##? bitand替&
對于以上的用諸如<%等兩個字符替換原字符的,稱之為“二聯符”.
/*在VC6。0上測試C++的引入記號,未通過。你可以在GCC下測試一下。*/
參考: 《C/C++深層探索》
轉載于:https://www.cnblogs.com/zimmerman/archive/2007/11/01/945631.html
總結
- 上一篇: 使用 C# 开发智能手机软件:推箱子(二
- 下一篇: 概述 互联网时代的商业挑战