C++标准中一些鲜为人知的特性

1. trigraph三字符组
据说是为了照顾旧式键盘,还是为了键盘坏了,或者是使用非ASCII字符编码的语言输入方便,设计了一些三元字符组,两个问号加一个符号在预处理时替换为一个字符。MSDN这么解释

The source character set of C source programs is contained within the 7-bit ASCII character set but is a superset of the ISO 646-1983 Invariant Code Set. Trigraph sequences allow C programs to be written using only the ISO (International Standards Organization) Invariant Code Set.

这些三字符组有

Trigraph replacement

Trigraph replacement

Trigraph replacement

??= #

??( [

??< {

??/ /

??) ]

??> }

??’ ^

??! |

??- ~

2. alternative tokens
下面几对符号等价

Alternative PrimaryAlternative Primaryalternative Primary
<% {and &&and_eq &=
%> }bitor |or_eq |=
<: [or ||xor_eq ^=
:> ]xor ^not !
%: #compl ~not_eq !=
%:%: ##bitand &

于是下面的程序就是合法的C++程序,而且很标准:

??=include

int suM(int a, int b)
<%
int arr<:2:>;
arr<:0:> = a,
arr<:1 ??/
:> = b;
return arr??(0:> + arr??(1];
%>

int main(int argc, char* argv[])
??<
bool bv = false;
std::cout<<"Program name:"< if( ( bv ??! 1 and 1) not_eq false){
int iv = 1333;
std::cout<<!--??-iv<<std::endl; <br /--> }
std::cout<<"3+4="< return 0;
??>

用GCC编译的时候加上-trigraphs 选项即可,VC默认编译不通过,可能需要编译选项,暂时还没找到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值