开发手册 欢迎您!
软件开发者资料库

C语言typedef

C语言中提供typedef 关键字,typedef是在C语言中用来为复杂的声明定义简单的别名,它与宏定义有些差异。它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。本文主要介绍C语言中typedef的使用。

1、typedef定义及使用

使用typedef关键字为指定类型取一个别名,可以为char*取一个别名为pStr

例如,

typedef   char* pStr;

例如,

#include #include typedef struct Books{   char  title[50];   char  author[50];   char  subject[100];   int   book_id;} Book;int main( ){   Book book;   strcpy( book.title, "C 教程");   strcpy( book.author, "wonhero");    strcpy( book.subject, "编程语言");   book.book_id = 1;   printf( "书标题 : %s\n", book.title);   printf( "书作者 : %s\n", book.author);   printf( "书类目 : %s\n", book.subject);   printf( "书 ID : %d\n", book.book_id);   return 0;}

2、typedef 和 #define区别

typedef定义一种类型的别名,而不是简单的宏替换。

  • typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如可以定义 1 为 ONE。
  • typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。

例如,

typedef char* pStr1;#define pStr2  char*;pStr1  s1,s2;pStr2  s3,s4; 

上面示例中,s1s2s3都被定义为char *,而s4则定义成了char,不是我们所预期的指针变量(相当于:char *s3,s4;)。根本原因就在于#define只是简单的字符串替换而typedef则是为一个类型指定别名。

例如,

#include  #define TRUE  1#define FALSE 0typedef   char* pStr1;#define pStr2  char*pStr1  s1,s2;pStr2  s3,s4;  int main( ){   printf("size of s1 is: %d\n",sizeof(s1));//char* 类型        printf("size of s2 is: %d\n",sizeof(s2));//char* 类型      printf("size of s3 is: %d\n",sizeof(s3));//char* 类型     printf("size of s4 is: %d\n",sizeof(s4));//char类型     printf( "TRUE 的值: %d\n", TRUE);   printf( "FALSE 的值: %d\n", FALSE);    return 0;}