Kei*_*son 26
我不确定,但您最有可能发现IBM大型机环境中使用的有向图和三字符.该EBCDIC字符集不包括所需要的C.一些字符
对于有向图和三字符的另一个理由,7位ASCII-ish字符集用一些重音字母替换一些标点字符,今天可能不太重要.
在这样的环境之外,我怀疑三元组错误比故意更常用,如:
puts("What happened??!");
Run Code Online (Sandbox Code Playgroud)
作为参考,三元组在1989 ANSI C标准中引入(基本上成为1990 ISO C标准).他们是:
??= # ??) ] ??! |
??( [ ??' ^ ??> }
??/ \ ??< { ??- ~
Run Code Online (Sandbox Code Playgroud)
替换发生在源代码中的任何位置,包括注释和字符串文字.
有向图是某些标记的替代拼写,不会影响注释或文字:
<: [ :> ]
<% { %> }
%: # %:%: ##
Run Code Online (Sandbox Code Playgroud)
1995年的ISO C标准修正案引入了有向图.
Tem*_*Rex 16
C++ 1z(C++ 1y之后的下一个标准将被标准化为-hopefully- C++ 14)有一个提议,旨在从标准中删除三字符.他们对另外一个未公开的大型代码库进行了案例研究:
案例分析
检查了三个类似构造在一个大型代码库中的用法.我们发现:
923个逃脱的实例?在字符串文字中避免三字母替换:string pattern()const {return"foo - ???? \? - of - ?????"; }
在测试代码中故意使用了4个三字母实例:两个在编译器的测试套件中,另外两个在boost的预处理器库的测试套件中.
在生产代码中故意使用了0个三字符实例.Trigraphs继续给C++用户带来负担.
该提案指出(原始提案大胆强调):
从物理源文件字符的实现定义映射到基本源字符集可以包括三字符翻译(甚至可以避免左右的时间内这样做的:如果三字母从完全的语言,是希望支持他们能继续这样做的实现去除原始字符串文字).我们不需要标准中的三字符来实现向后兼容性.
今天没有使用tri和di-graphs,它只存在于非常有限的环境中创建的非常旧的代码中.任何包含三字符的代码,如果你试图在像VS这样的现代编译器上编译它们,除非你指定一个链接器选项,否则它通常不会编译.我知道对于Visual Studio,该选项是"/ Zc:trigraphs"
为什么它们存在,是因为C++委员会从不发布会破坏遗留代码的变更.不论结果好坏.有一个轶事,他们的删除被提出和支持,并由一个单独的IBM代表停止.
归档时间: |
|
查看次数: |
6963 次 |
最近记录: |