• C专家编程 第3章 分析C语言的声明 3.1 只有编译器才会喜欢的语法


    <<爱丽丝漫游奇境记>>  
    作者笔名:Lewis Carroll 
    作者真名:Charles Dodgson 
    事件:维多利亚女王

    编程语言中的类型模型(type model)。例如,下面的C语言声明: 
    typedef char *string;
    string punchline = "I'm a frayed knot"; 
    按照骑士的思维方式,他会这样进行理解:
                            被称作                是 
    变量的类型         string                 char *
    变量                    punchline          I'm a frayed knot

    /*3.1 只有编译器才会喜欢的语法*/
    /*Kernighan和Ritchie承认,“C语言声明的语法有时会带来严重的问题”。C语言声明的语法对于编译器(或编译器设计者)的处理来说并不是什么大不了的事。C语言声明的语法实在是非常可怕,渗透于整个语言使用的方方面面。毫不夸张地说,正是由于在组合类型方面的笨拙行为,C语言被
    显著且毫无必要地复杂化了。
     */ 
    /*C语言 类型模型(type model)
     *BCPL语言(C语言的祖先)几乎没有类型,它把二进制字作为唯一的数据类型
     *所以C语言先天有缺。然后出现了一种C语言设计哲学,要求对象的声明形式与它
     *的使用形式尽可能相似。这种做法的好处是各种不同操作符的优先级在“声明”
     *和“使用”是一样的。 它的缺点在于操作符的优先级是C语言中另外一个设计不当、
     *过于复杂之处。 
     */ 
    /*一个比较好的声明指针的方法是:
     *int &p;
     *它至少能提示p是一个整型数的地址。这种语法已被C++采纳,用于表示参数的传址调用
     */ 
    /*C语言的声明所存在的最大问题是,你无法以一种人们所习惯的自然方式从左向右阅读一个声明,
     *在ANSI C引入了volatile和const关键字后,情况就更糟糕了 
     *volatile和const关键字后,只能出现在声明中,而不是使用中
     *风格看上去像是声明,但却没有标识符的东西(如形式参数声明和
     *强制类型转换)看上去滑稽。 
     */
    /*强制类型转换*/ 
    char (*j)[20]; //j是一个指向数组的指针,数组内有20个char元素
    j = (char (*)[20]) malloc(20);

    //the object pointed by pointer is read_only
    const int *grape;
    int const *grape;
    //pointer is read_only
    int * const grape_jelly;

    //the object pointed by pointer is read_only and pointer is also read_only
    const int * const grape_jam;
    int const * const grape_jam;

    /*ANSI C提到,typedef说明符之所以被称为“存储类型说明符”,只是为了语法上的方便而已*/
    char * const *(*next)();

    你能知道如何分析这个函数的声明吗?

  • 相关阅读:
    南京邮电大学电工电子基础B实验六(组合逻辑电路)
    跨境电商业务拓展专用服务器,腾讯云海外轻量应用服务器低至28元
    https证书——保护网站安全
    Android 12 WiFi 连接结果上报
    α-SRHLA
    闭包的优缺点
    C专家编程 第10章 再论指针 10.8 轻松一下---程序检验的限制
    npm学习:安装、更新以及管理npm版本
    springboot+视频网站 毕业设计-附源码240925
    Sylvester矩阵、子结式、辗转相除法的三者关系(第二部分)
  • 原文地址:https://blog.csdn.net/weixin_40186813/article/details/126071390