C typedef

В языке C естьtypedefключевое слово, с помощью которого можно дать типу новое имя. В следующем примере определяется обозначение для однобайтового числаBYTE:

typedef unsigned char BYTE;

После этого определения типа идентификатор BYTE можно использовать как тип.unsigned charсокращения, например:

BYTE  b1, b2;

По соглашению в определении используются заглавные буквы, чтобы напомнить пользователям, что имя типа — это символьное сокращение, но можно также использовать строчные буквы, как показано ниже:

typedef unsigned char byte;

Вы также можете использоватьtypedefчтобы дать новое имя определяемому пользователем типу данных. Например, можно применить typedef к struct, чтобы определить новое имя типа данных, а затем использовать этот новый тип данных для непосредственного определения переменных struct, как показано ниже:

Пример

#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 Tutorial"); strcpy( book.author, "Example"); strcpy( book.subject, "Programming language"); book.book_id = 12345; printf( "Book Title : %s\n", book.title); printf( "Book Author : %s\n", book.author); printf( "Категория книги : %s\n", book.subject); printf( "ID книги : %d\n", book.book_id); return 0; }

Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:

书标题 : C 教程
书作者 : Example
书类目 : 编程语言
书 ID : 12345

typedef против #define

#define— это директива C, используемая для определения псевдонимов для различных типов данных, аtypedefаналогичен, но у них есть следующие различия:

  • typedefОграничен определением символьных имён для типов,#defineОн может определять не только псевдонимы для типов, но и псевдонимы для значений; например, можно определить 1 как ONE.
  • typedefинтерпретируется компилятором,#defineИнструкция обрабатывается препроцессором.

Ниже приведён простейший пример использования #define:

Пример

#include <stdio.h> #define TRUE 1 #define FALSE 0 int main( ) { printf( "Значение TRUE: %d\n", TRUE); printf( "Значение FALSE: %d\n", FALSE); return 0; }

Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:

TRUE 的值: 1
FALSE 的值: 0
Другие расширения