• C专家编程 第3章 分析C语言的声明 3.5 typedef可以成为你的朋友


    3.5 typedef可以成为你的朋友 
    /*typedef是一种有趣的声明形式:它为一种类型引入新的名字,
     *而不是为变量分配空间。在某些方面,typedef类似于宏文本替换,它并没有引入新类型
     *而是为现有类型取个新名字。 
     *typedef关键字可以是一个常规声明的一部分,可以出现在靠近声明开始
     *部分的任何地方。事实上,typedef的格式与变量声明完全一样,只是多了这个关键字,
     *用来说明它的实质。 
     *普通的声明表示“这个名字是一个指定类型的变量”
     *typedef关键字并不创建一个变量,而是宣称“这个名字是指定类型的同义词”。 
     *一般情况下,typedef用于简洁地表示指向其他东西的指针 
     */
    /*signal()是一种系统调用,用于通知运行时系统,当某种特定的“软件中断”
     *发生时调用特定的程序,它的真正名称应该是“Call_that_routine_when_this_interrupt_comes
     *_in"(当该中断发生时调用那个程序)。你调用signal(),并通过参数传递告诉它中断的类型
     *以及用于处理中断的程序。
     */ 
    /*ANSI C标准中,signal()的声明如下:*/ 
    void (*signal(int sig, void (*func)(int)))(int);
    void (*signal())(int);
    //返回一个函数指针,后者所指向的函数接受一个int参数并返回void。其中一个参数是其本身 
    void (*func)(int);

    typedef void (*ptr_to_func)(int);
    /*它表示ptr_to_func是一个函数指针,该函数
     *接受一个int参数,返回值为void
     */
    ptr_to_func signal(int, ptr_to_func) {
        /*它表示signal是一个函数,它接受两个参数
         *其中一个是int, 另一个是ptr_to_func,返回
         *值是ptr_to_func
         */ 
    }  
    /*typedef的缺点
     *它同样具有与其他声明一样的混乱语法,同样可以把几个声明器塞到一个声明中。对于结构,
     *除了可以在书写时省掉struct关键字之外,typedef并不能提供显著的好处,而少些一个struct
     *其实并没有多大帮助。在任何typedef声明中,甚至不必把typedef放在声明的开始位置
     */
     
    /*小启发*/
    /*不要在一个typedef中放入几个声明器,如下表示:*/ 
    typedef int *ptr, (*func)(), arr[5];
    /*ptr是“指向int的指针”类型
     *func是“指向返回值是int的函数的指针”类型
     *arr是“长度为5的int型数组”类型
     */
    //千万不要把typedef嵌到声明的中间部分,如下所示:
    unsigned const long typedef int volatile *kumquat;typedef int (*array_ptr)[100];
    /*typedef 应该如前所述出现在声明的开始位置。在同一个代码块中,typedef
     *引入的名字不能与其他标识符同名。
     */ 

  • 相关阅读:
    互联网大厂技术岗实习/求职经验分享(实习内推+简历+面试+offer)
    9.2 校招 内推 面经
    利用大模型MoritzLaurer/mDeBERTa-v3-base-xnli-multilingual-nli-2mil7实现零样本分类
    iPhone或在2024开放第三方应用商店。
    【Python 千题 —— 基础篇】进制转换:十进制转二进制
    Android 刘海屏适配指南
    Linux下调试方法汇总
    【AI视野·今日CV 计算机视觉论文速览 第265期】Wed, 11 Oct 2023
    DataCap 自定义 File 转换器
    视频格式怎么批量转换?5 个批量视频转换器分享
  • 原文地址:https://blog.csdn.net/weixin_40186813/article/details/126072052