Penggunaan Typedef termasuk: 1. Jenis data asas Typedef mengambil "alias". Semua jenis data dalam bahasa C boleh menggunakan typedef untuk mentakrifkan semula nama jenis; termasuk: nama struktur struktur { };, nama unit kesatuan { };, enumerasi enum {}; 3. Typedef mengambil "alias" untuk tatasusunan;
Persekitaran pengendalian artikel ini: sistem Windows 10, versi C++ 20, komputer dell g3.
Dalam aplikasi praktikal, typedef terutamanya mempunyai empat kegunaan berikut:
Dalam erti kata lain, semua jenis data dalam bahasa C boleh menggunakan kata kunci typedef untuk mentakrifkan semula nama jenis
typedef unsigned int size;typedef unsigned int16 u16;typedef unsigned int8 u8;...
Jenis data tersuai termasuk: nama struktur struktur{ };, nama unit kesatuan { };, enumerasi enum { }; kaedah untuk mentakrifkan semula nama data untuk struktur ialah:
struct students{ char sex; char name[120]; int ages;};
Selain itu, ia juga boleh ditakrifkan dengan typedef:
struct students{ char sex; char name[120]; int ages;}std;std.name[20]="wujunwu"
struct students{ char sex; char name[120]; int ages;};typedef struct students std;std.name[20]="wujunwu"
typedef char arr_name[20];arr_name ane; ane[20]="wujunwu"
int a=2;int* pointer;pointer =&a;
Jika jenis data a ialah char, iaitu, char a =2; sebenarnya, program di atas dilaksanakan Dua langkah:
Langkah 1: Berikan penuding "alias"int a=2;typedef int* pointer;pointer p;p=&a;
char a=2;typedef int* pointer;pointer p;p=&(pointer)a;
typedef unsigned int bool;typedef bool(*pCopySDMMC2Mem)(int, unsigned int, unsigned short, unsigned int*, bool);typedef void (*pBL2Type)(void);pCopySDMMC2Mem p1=(pCopySDMMC2Mem)0xD0037F98;pBL2Type p2 = (pBL2Type)0x23E00000;
Perangkap dalam typedef
Seterusnya lihat contoh mudah penggunaan typedef, seperti yang ditunjukkan dalam kod berikut:
pCopySDMMC2Mem p1;pBL2Type p2;
Dalam kod di atas , adakah "const PCHAR" bersamaan dengan "const char*"?
(pCopySDMMC2Mem)0xD0037F98; //真正在写代码时不能这样写(pBL2Type)0x23E00000;
Perlu juga diambil perhatian bahawa walaupun typedef tidak benar-benar mempengaruhi ciri storan objek, ia masih merupakan kata kunci kelas storan dalam sintaks, sama seperti kata kunci seperti auto, extern, statik dan daftar . Oleh itu, kaedah pengisytiharan berikut tidak boleh dilaksanakan:
p1=(pCopySDMMC2Mem)0xD0037F98;p2 = (pBL2Type)0x23E00000;
Sebab mengapa ia tidak boleh dilaksanakan ialah kata kunci kelas storan berbilang tidak boleh diisytiharkan Memandangkan typedef telah pun menduduki kedudukan kata kunci kelas storan, oleh itu, dalam typedef Anda tidak lagi boleh menggunakan kata kunci kelas storan statik atau lain-lain dalam perisytiharan. Sudah tentu, pengkompil juga akan melaporkan ralat Sebagai contoh, mesej ralat dalam VC++2010 ialah "Tidak boleh menentukan berbilang kelas storan."
(1) Nama simbol yang dicipta oleh typedef terhad kepada Jenis, tidak terhad kepada nilai
(2) typedef ditafsirkan oleh pengkompil, bukan prapemproses
Dalam aplikasi praktikal , typedef Terdapat terutamanya empat penggunaan:
Dengan kata lain, semua jenis data dalam bahasa C boleh menggunakan Typedef Kata Kunci untuk mentakrifkan semula nama jenis
typedef unsigned int size;typedef unsigned int16 u16;typedef unsigned int8 u8;...
Jenis data tersuai termasuk: nama struktur struktur{ } , unit kesatuan name { };, enumeration enum { };
struct students{ char sex; char name[120]; int ages;};
Kaedah yang biasa digunakan untuk mentakrifkan semula nama data dalam struktur ialah:
struct students{ char sex; char name[120]; int ages;}std;std.name[20]="wujunwu"
Selain itu, typedef juga boleh digunakan untuk mentakrifkan:
struct students{ char sex; char name[120]; int ages;};typedef struct students std;std.name[20]="wujunwu"
typedef char arr_name[20];arr_name ane; ane[20]="wujunwu"
int a=2;int* pointer;pointer =&a;
bersamaan dengan:
int a=2;typedef int* pointer;pointer p;p=&a;
Jika jenis data a ialah char, iaitu, char a =2 maka,
char a=2;typedef int* pointer;pointer p;p=&(pointer)a;
typedef unsigned int bool;typedef bool(*pCopySDMMC2Mem)(int, unsigned int, unsigned short, unsigned int*, bool);typedef void (*pBL2Type)(void);pCopySDMMC2Mem p1=(pCopySDMMC2Mem)0xD0037F98;pBL2Type p2 = (pBL2Type)0x23E00000;
pCopySDMMC2Mem p1;pBL2Type p2;
Perangkap dalam typedef
Seterusnya lihat contoh mudah penggunaan typedef, seperti yang ditunjukkan dalam kod berikut:
(pCopySDMMC2Mem)0xD0037F98; //真正在写代码时不能这样写(pBL2Type)0x23E00000;
Dalam kod di atas , adakah "const PCHAR" bersamaan dengan "const char*"?
p1=(pCopySDMMC2Mem)0xD0037F98;p2 = (pBL2Type)0x23E00000;
Perlu juga diambil perhatian bahawa walaupun typedef tidak benar-benar mempengaruhi ciri storan objek, ia masih merupakan kata kunci kelas storan dalam sintaks, sama seperti kata kunci seperti auto, extern, statik dan daftar . Oleh itu, kaedah pengisytiharan berikut tidak boleh dilaksanakan:
typedef char* PCHAR;int strcmp(const PCHAR,const PCHAR);
Sebab mengapa ia tidak boleh dilaksanakan ialah kata kunci kelas storan berbilang tidak boleh diisytiharkan Memandangkan typedef telah pun menduduki kedudukan kata kunci kelas storan, oleh itu, dalam typedef Anda tidak lagi boleh menggunakan kata kunci kelas storan statik atau lain-lain dalam perisytiharan. Sudah tentu, pengkompil juga akan melaporkan ralat Sebagai contoh, mesej ralat dalam VC++2010 ialah "Tidak boleh menentukan berbilang kelas storan."
Atas ialah kandungan terperinci Apakah kegunaan typedef. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!