C – Typedef

Ngôn ngữ lập trình C cung cấp một từ khóa gọi là typedef, bạn có thể sử dụng từ khóa này để đặt tên kiểu (type) mới của riêng bạn, tùy theo nhu cầu. Sau đây là một ví dụ để định nghĩa một cụm từ BYTE để khai báo những số có một byte.

typedef unsigned char BYTE;

Sau khi định nghĩa, định danh BYTE có thể được dùng để viết tắt cho kiểu unsigned char, ví dụ:

BYTE b1, b2;

Theo quy ước, chữ hoa (uppercase) được sử dụng định nghĩa để lưu ý người dùng rằng tên kiểu thực sự là một chữ viết tắt tượng trưng, tuy nhiên bạn cũng có thể sử dụng chữ thường (lowercase), như sau.

typedef unsigned char byte;

Bạn cũng có thể sử dụng typedef để đặt tên cho các kiểu dữ liệu do người dùng định nghĩa. Ví dụ: bạn có thể sử dụng typedef với cấu trúc (structure) để định nghĩa một kiểu dữ liệu mới, rồi sau đó sử dụng kiểu dữ liệu đó để định nghĩa trực tiếp các biến cấu trúc như sau.

#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;
}

Biên dịch và chạy chương trình, ta được kết quả sau.

Book title : C Programming
Book author : Nuha Ali
Book subject : C Programming Tutorial
Book book_id : 6495407

typedef và #define

#define là một chỉ thị C (C-directive) cũng được dùng để định nghĩa bí danh (alias) cho nhiều kiểu dữ liệu khác nhau, tương tự như typedef, nhưng có những điểm khác biệt như.

  • typedef bị giới hạn chỉ trong việc đặt tên tượng trưng (symbolic name) cho kiểu dữ liệu (data type), trong khi #define có thể được dùng để định nghĩa tên giả (alias) cho giá trị (value). Ví dụ như bạn có thể định nghĩa 1 là ONE, v.v.
  • Quá trình thông dịch (interpretation) typedef được thực hiện bởi bộ biên dịch (compiler), trong khi khai báo #define được xử lý bởi bộ tiền xử lý (pre-processor).

Ví dụ sau cho thấy cách sử dụng #define trong lập trình.

#include <stdio.h>
 
#define TRUE  1
#define FALSE 0
 
int main( ) {
   printf( "Value of TRUE : %d\n", TRUE);
   printf( "Value of FALSE : %d\n", FALSE);

   return 0;
}

Khi đoạn code trên được biên dịch và thực thi, ta sẽ được kết quả sau.

Value of TRUE : 1
Value of FALSE : 0

Xem thêm Are typedef and #define the same in c? – stackoverflow.

(Tiếp theo)

Icons made by Freepik from www.flaticon.com