当在C中使用typedef时,它会创建一个新类型还是只创建一个类型名称?

Nav*_*Neo 6 c types typedef

#include <stdio.h>
#include <string.h>

typedef struct Books {
     char title[50];
     char author[50];
     char subject[100];
     int book_id;
} Book;

int main( ) {

  Book book;

  strcpy( book.title, "C Programming");
  strcpy( book.author, "Nuha Ali"); 
  strcpy( book.subject, "C Programming Tutorial");
  book.book_id = 6495407;

  printf( "Book title : %s\n", book.title);
  printf( "Book author : %s\n", book.author);
  printf( "Book subject : %s\n", book.subject);
  printf( "Book book_id : %d\n", book.book_id);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,Book是一个新的Data类型还是它只是一个替代的结构名称?

或换句话说,如果代码是:typedef unsigned char newDType; newDType是一个新的数据类型或替代名称unsigned char

Kei*_*son 7

对此的明确答案是ISO C标准.N1570是最新的选秀.第6.7.8节第3段说:

一个typedef声明不引入新的类型,只为使指定类型的代名词.

类似的措辞出现在C标准的所有先前版本中,并且至少可以追溯到1978年出版的第一版Kernighan和Ritchie(K&R1).


Che*_*bim 2

来自typedef说明符msdn页面点击了解更多

声明typedef引入了一个名称,该名称在其范围内成为声明的类型声明部分给出的类型的同义词。


因此,正如所引用的,新名称只是原始类型的替代名称(同义词)。一般来说,typedef使用声明是为了使声明更加统一和紧凑。