The _t
biasanya membungkus sebuah definisi jenis buram.
GCC hanya menambahkan nama yang diakhiri dengan _t
namespace cadangan yang tidak boleh Anda gunakan, untuk menghindari konflik dengan versi Standar C dan POSIX yang akan datang (manual pustaka GNU C) . Setelah beberapa penelitian, saya akhirnya menemukan referensi yang benar di dalam Standar POSIX (1003.1, Rationale (Informative)):
B.2.12 Jenis Data
Persyaratan bahwa tipe tambahan yang didefinisikan dalam bagian ini diakhiri dengan '' _t '' didorong oleh masalah polusi ruang nama. Sulit untuk menentukan jenis (di mana jenis itu bukan yang didefinisikan oleh IEEE Std 1003.1-2001) dalam satu file header dan menggunakannya dalam file lain tanpa menambahkan simbol ke ruang nama program. Untuk memungkinkan pelaksana menyediakan jenis mereka sendiri, semua aplikasi yang sesuai diperlukan untuk menghindari simbol yang diakhiri dengan '' _t '', yang memungkinkan pelaksana menyediakan jenis tambahan. Karena penggunaan utama tipe adalah dalam definisi anggota struktur, yang dapat (dan dalam banyak kasus harus) ditambahkan ke struktur yang didefinisikan dalam IEEE Std 1003.1-2001, kebutuhan akan tipe tambahan menarik.
Singkatnya, Standar mengatakan bahwa ada peluang bagus untuk memperpanjang daftar tipe Standar, oleh karena itu Standar membatasi _t
ruang nama untuk penggunaannya sendiri.
Misalnya, program Anda cocok dengan POSIX 1003.1 Masalah 6 dan Anda menentukan jenisnya foo_t
. POSIX 1003.1 Masalah 7 akhirnya dirilis dengan tipe yang baru didefinisikan foo_t
. Program Anda tidak cocok dengan versi baru, yang mungkin menjadi masalah. Membatasi _t
penggunaan mencegah dari refactoring kode. Dengan demikian, jika Anda bertujuan untuk kepatuhan POSIX, Anda harus menghindari standar _t
sebagaimana dinyatakan olehnya.
Catatan: secara pribadi, saya mencoba untuk tetap pada POSIX karena saya pikir itu memberikan dasar-dasar yang baik untuk pemrograman bersih. Terlebih lagi, saya cukup menyukai panduan Linux Coding Style (bab 5) . Ada beberapa alasan bagus mengapa tidak menggunakan typedef. Semoga bantuan ini!
int_t
didefinisikan? Jika selalu didefinisikan sebagaiint
, itu tidak berguna; itu jauh lebih jelas untuk digunakanint
secara langsung. Jika itu tidak selalu didefinisikan sebagaiint
(katakanlah, jika bisalong int
ataushort int
), maka itu adalah nama yang dipilih dan membingungkan.