zoukankan      html  css  js  c++  java
  • c++中typedef

    今天在学习sizeof的时候偶遇typedef这个关键字,抱着不弄明白不死心的心态,在网上搜了些资料,加上自己的理解写下这篇typedef,权当自己用来见证自己进步和备忘的。

    typedef 照我理解就是取别名。

    取别名一:

    typedef char * SChar;

    这里给char * 类型的指针重新取了哥SChar的别名,则在以后的代码中要定义Char * 就可以这样写 SChar 如:

    char * a 等价于 SChar a;

    为结构体取别名:

    typedef struct test1

    {

      char a;

    }Test;

    则 Test代表了 Struct test1,

    Test a 等价于 struct test1 a;

    取别名三,通过取别名实现平台兼容性

    例如:

    比如定义一个叫 REAL 的浮点类型,在目标平台一上,让它表示最高精度的类型为:

    typedef long double REAL;

    在不支持 long double 的平台二上,改为:

    typedef double REAL;

    在连 double 都不支持的平台三上,改为:

    typedef float REAL;

    也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改。

    取别名四:为复杂函数指针或者类型取一个语义简单明了的别名。

    如:定义函数指针时可以这样定义: int (*fn1)(int *p);如果这样写就是定义了一个名字为fn1的指向一个返回类型为int,参数类型为int指针的函数指针,如果接下来还要定义一个类似的函数指针还得这样写int (*fn2)(int *p),这样写可读性和修改性不是很强。如果我们用typedef 就解决了以上问题。

    typedef int (* pFn)(int *p);

    pFn fn1;

    pFn fn2;

    以上等价于上面的定义了两个函数指针。显然这样写代码的可读性明显提高了很多,同时,如果pFn指针的类型变了的话也只要修改typedef处代码即可。

  • 相关阅读:
    C++命名规则
    protobuf_1
    以太网帧格式
    LinQ
    asp.mvc 基本知识
    Lucene.Net 优化索引生成,即搜索显示优化
    HTML Meta中添加X-UA-Compatible和IE=Edge,chrome=1有什么作用
    DataSet
    伪Excel导出新版代码
    WebUI 常用
  • 原文地址:https://www.cnblogs.com/quandeboke/p/2998784.html
Copyright © 2011-2022 走看看