zoukankan      html  css  js  c++  java
  • 替用运算符

    看这样一段代码,你能认出是什么语言吗?

    %:include <stdio.h>
    
    char a<:4:>={'A','B','C','D'};
    
    int main()
    <%
    	printf("%c
    ",a<:1:>);
    	return 0;
    %>
    

    emmm..看stdio.h好像是C语言吧,可%: <%%> <::>都是什么鬼?
    如果你将这段代码保存为.c后缀的文件编译运行一下,你会发现,没有一点点的编译错误!

    这段代码等价于

    #include <stdio.h>
    
    char a[4]={'A','B','C','D'};
    
    int main()
    {
    	printf("%c
    ",a[1]);
    	return 0;
    }
    

    这里的奥秘其实来源于一个叫做ISO646的标准,我在国际标准组织官网找到了这份文件

    看了一下,下载这个标准大概一个星期的伙食费就没了

    果断百度盗版。
    我们可以看到,这里给出了一张名为unique graphic character allocations(唯一图形字符分配)的表,受限于篇幅,我们省去字母部分,只看符号部分。

    注意一下,这里边是没有包含#[]``{}这几个写C语言程序时常用的字符的。

    标准8.2给出了IRV(国际参考版本)

    翻译一下开头的第一句话
    this version is available for use when there is no requirement to use a national or an application-oriented version.
    当不需要使用国家或面向应用程序的版本时,可以使用此版本。

    小结一下官方的意思,只要你使用唯一图形字符分配中的字符,在各个国家和系统中都是通用的,但是如果你使用IRV中的字符,在某些国家可能是不通用的。

    C是在美国使用标准美式键盘的系统上发展而来的,但在世界各地,并不是所有的键盘都有与美式键盘相同的的符合。

    例如下面这个德文键盘

    你看,你能在上面找到井号吗?找不到。

    那么德国人写C语言如果要声明一个头文件,怎么办呢?

    为了解决这样的问题,C99标准为逻辑运算符增加了可供选择的拼写法。

    这样,即使德国人键盘上没有#这些符号,也可以通过%:等符号进行替代。

  • 相关阅读:
    2019届宝鸡理数质检Ⅱ解析版
    随机事件的概率
    三视图
    求曲线的轨迹方程
    组合法破解二项式系数问题
    二项式定理
    计数原理
    HBase的Shell命令
    HBase伪分布安装
    HBase基础知识
  • 原文地址:https://www.cnblogs.com/velscode/p/10549086.html
Copyright © 2011-2022 走看看