• 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)();

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

  • 相关阅读:
    第四章 使用Vitepress搭建文档网站
    PHP安全问题:远程溢出、DoS、safe_mode绕过漏洞
    [MQ] SpringBoot使用扇型(广播)交换机/主题交换机
    汽车射频之基础
    让Unity打包AssetBundle更轻松
    基于java+ssm购物商城网站系统-计算机毕业设计
    Softing mobiLink助力过程自动化——兼容HART、FF、PA的多协议接口工具
    【Linux】项目部署CPU彪高如何定位
    7 客户端认证方式 之 client_secret_jwt
    vue3项目,vite+vue3+ts+pinia(7)-axios网络请求
  • 原文地址:https://blog.csdn.net/weixin_40186813/article/details/126071390