• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

使typedef 和 #define 定义数据类型有何不同?

捷波 2018-07-22 浏览量:940

有下面两种定义pStr数据类型的方法,两者有什么不同?哪一种更好一点?

typedef char* pStr;

#define pStr char*;

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案

    • 作用域不同!


    typedef:
    如果放在所有函数之外,它的作用域就是从它定义开始直到文件尾;
    如果放在某个函数内,定义域就是从定义开始直到该函数结尾;


    #define:
    不管是在某个函数内,还是在所有函数之外,作用域都是从定义开始直到整个文件结尾。


    • 一个要以分号结尾,另一个不用

    ​typedef是在C和C++编程语言中一个关键字​,所以要符合语法,加分号结尾。

    define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。​

    • 发布于 2018-07-22
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:15
  • define实在预编译阶段将所有的宏定义进行替换,出了问题并不会指向定义宏的语句,而typedef是取别名的意思,typedef更好一点
    • 发布于2018-07-22
    • 举报
    • 评论 0
    • 0
    • 0

  • define  是编译前替换,typedef是给 char* 取了个新名字叫pStr,看你用在什么地方
    • 发布于2018-07-22
    • 举报
    • 评论 0
    • 0
    • 0

  • #define是简单的字符串替换,而typedef是针对类型的替换。define一般用于定义常量。

    • 发布于2018-07-22
    • 举报
    • 评论 0
    • 0
    • 0

  • #define是傻瓜式的替换,而typedef相当于是取别名的意思,两者没有谁比谁好之说,术业有专攻,各有各的用处,如是而已
    • 发布于2018-07-22
    • 举报
    • 评论 0
    • 0
    • 0

  • typedef是定义了一个新的数据类型而define只是定义了一个展开的宏
    • 发布于2018-07-22
    • 举报
    • 评论 0
    • 0
    • 0

  • #define pStr char*;

    上面这句话是错误的,这样用了后,后面利用 pStr 会出错的,因为后面多了个引号。

    hayden 的介绍很全面了。

    • 发布于2018-07-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 宏定义只是简单的字符串代换,是在预处理完成的,而l:lang="en-us" style="box-sizing:border-box;outline:0px;word-break:break-all;font-style:italic;color:#4F4F4F;font-family:-apple-system "font-size:medium;text-align:justify;white-space:normal;background-color:#FFFFFF;">typedef是在编译时处理的,它不是作简单的代换,而是对类型说明符重新命名。被命名的标识符具有类型定义说明的功能。宏定义虽然也可表示数据类型, 但毕竟是作字符代换。在使用时要分外小心,以避出错。
    • 发布于2018-07-22
    • 举报
    • 评论 0
    • 0
    • 0

  • typedef可以被编译器检查.
    • 发布于2018-07-23
    • 举报
    • 评论 0
    • 0
    • 0

  • typedef是类型

    define直接会去替换程序中的字符

    • 发布于2018-07-23
    • 举报
    • 评论 0
    • 0
    • 0

  • define就是硬替换,typedef 是把一种数据结构单独进行定义,二者不是一回事
    • 发布于2018-07-23
    • 举报
    • 评论 0
    • 0
    • 0

  • typedef是为已存在的类型定义别名,typedef name alia前提是name为可用类型,而#define 存粹的是在预编译接端进行字符替换 #define str1 str2
    • 发布于2018-07-23
    • 举报
    • 评论 0
    • 0
    • 0

  • typedef是数据结构的类型替换,define可以用在任何变量和数据的替换
    • 发布于2018-07-26
    • 举报
    • 评论 0
    • 0
    • 0

  • typedef可以定义类型,但define只是起到替换作用
    • 发布于2018-08-01
    • 举报
    • 评论 0
    • 0
    • 0

  • define是替换的作用,typedef可以直接定义数据类型
    • 发布于2018-08-14
    • 举报
    • 评论 0
    • 0
    • 0

  • typedef可以直接定义数据的类型,但是define一般用作替换的场景
    • 发布于2018-08-21
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

使typedef 和 #define 定义数据类型有何不同?