typedef关键字

typedef关键字typedef是C语言的一个关键字,我们实际使用的时候可以理解成是一个绑定器,把若干标识符绑定在一起形成一个新类型,它是给编译器看的,编译器看到这个就直接将其当做一个新的类型看待了。当然了,如果有些人写的编译器并不是这么看待的,那就只能说明他对于C语言标准还没有彻底整明白。1.typedefunsignedcharu8;//u8就代表unsignedchar类…

大家好,欢迎来到IT知识分享网。typedef关键字

        typedef是C语言的一个关键字,我们实际使用的时候可以理解成是一个绑定器,把若干标识符绑定在一起形成一个新类型,它是给编译器看的,编译器看到这个就直接将其当做一个新的类型看待了。当然了,如果有些人写的编译器并不是这么看待的,那就只能说明他对于C语言标准还没有彻底整明白。

1. typedef unsigned char u8;    //u8就代表unsigned char类型了

举例:

u8  var1;//定义了一个名为var1的unsigned char型变量。

 

2. typedef unsigned int u16;     //u16就代表unsigned int类型了

举例:

u16  var1;//定义了一个名为var1的unsigned int型变量。

 

3. typedef与define是不同的,因为typedef是给编译器看的,而define是给预编译器看的,编译器遇到typedef时就会按照一个新类型来处理一件事,而预编译器遇到define时仅仅只是替换。

#define u8Ptr  unsigned char *    //这里在预编译器眼里u8Ptr仅仅只是为了编程方便临时文本替换成unsigned char *

举例:u8Ptr p1,p2;  //此时p1是指针类型变量,而p2是unsigned char型变量,这里足以数码u8Ptr仅仅只是文本替换。

思考:如果上面写成 #define U8PTR (unsigned char *)的形式,结果会怎么样?

typedef unsigned char *  u8Ptr;  //u8Ptr就代表unsigned char *了,编译器把u8Ptr当做一个新类型,它就是unsigned char *

举例:u8Ptr p1,p2;  //此时p1和p2都是指针变量,因此这足以说明u8Ptr是一个新类型,至少在编译器眼里就是这样的。

 

4. 思考下面代码是否有问题:

typedef char * PSTR;

char string[2] = “xy”;

const char * ptr1=string;

const PSTR ptr2=string;//相当于char * const ptr2;

ptr1++;

(*ptr1)++;

ptr2++;

(*ptr2)++;

【解析】const在修饰变量的时候,离谁越近就对谁起作用,因此,对于const char * ptr1来说,const离(*ptr1)较近,离ptr1较远,因此它只对(*ptr1)起作用,对ptr1不起作用,所以ptr1++是没问题的,而(*ptr1)++;则是错误的。而PSTR属于一个新类型,因此对于const PSTR ptr2来说,const显然是离ptr2更近,所以是对ptr2起作用对(*ptr2)不起作用,所以,ptr2初始化一次之后就不能变了,于是ptr2++是错误的,而(*ptr2)++是正确的。

 

5. typedef struct atom_tcb

{

    POINTER sp_save_ptr;

    uint8_t priority;

    void (*entry_point)(uint32_t);

    uint32_t entry_param;

    struct atom_tcb *prev_tcb;

    struct atom_tcb *next_tcb;

    uint8_t suspended;

    uint8_t suspend_wake_status;

    ATOM_TIMER *suspend_timo_cb;

#ifdef ATOM_STACK_CHECKING

    POINTER stack_top;            /* Pointer to top of stack allocation */

    uint32_t stack_size;          /* Size of stack allocation in bytes */

#endif

} ATOM_TCB;//定义了一个名为ATOM_TCB的结构体类型

【总结】用typedef定义的标识符是一个新类型,是一个整体,不可分割的整体。

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/16296.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信