惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - Franky
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
J
Java Code Geeks
F
Full Disclosure
V
V2EX
The Register - Security
The Register - Security
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
云风的 BLOG
云风的 BLOG
T
Troy Hunt's Blog
Microsoft Security Blog
Microsoft Security Blog
Help Net Security
Help Net Security
P
Privacy & Cybersecurity Law Blog
K
Kaspersky official blog
博客园 - 聂微东
Recorded Future
Recorded Future
I
Intezer
S
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
H
Hacker News: Front Page
SecWiki News
SecWiki News
M
MIT News - Artificial intelligence
Security Latest
Security Latest
Attack and Defense Labs
Attack and Defense Labs
A
About on SuperTechFans
aimingoo的专栏
aimingoo的专栏
宝玉的分享
宝玉的分享
T
Tenable Blog
B
Blog
N
News | PayPal Newsroom
P
Proofpoint News Feed
D
Docker
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
MyScale Blog
MyScale Blog
C
Cisco Blogs
A
Arctic Wolf
T
Threat Research - Cisco Blogs
I
InfoQ
Stack Overflow Blog
Stack Overflow Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
GbyAI
GbyAI
P
Palo Alto Networks Blog
Engineering at Meta
Engineering at Meta
Hugging Face - Blog
Hugging Face - Blog
Latest news
Latest news
Project Zero
Project Zero

博客园 - zim.NET

悼念友人 博客搬家了 函数调用中的黑客技术 3D学习笔记之一句话总结(不断更新中) 这么个女孩,你娶吗(转) 被误传了数千年的七句话(精简版_转载) 找工作故事之篇二 找工作故事之开篇 - zim.NET - 博客园 失落的阳光,陈酿的悲伤——许美静 一行命令解决批量重命名 一个空间换时间算法 求最长公共子序列 最小生成树算法讨论 用EditPlus打造你自己的IDE 将PPT内容导出为JPG图片 C/C++ 误区:fflush(stdin) 关于"extern" 闲谈成员初始化列表 脑筋急转弯3600题
混乱你的代码 - zim.NET - 博客园
zim.NET · 2007-11-01 · via 博客园 - zim.NET

注:这只是觉得好玩,才发上来的,事实上并不实用,但或许看完能对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++深层探索》