Antara int32
dan int32_t
, (dan juga antara int8
dan int8_t
) perbedaannya cukup sederhana: standar C mendefinisikan int8_t
dan int32_t
, tetapi tidak mendefinisikan apa pun yang bernama int8
atau int32
- yang terakhir (jika ada sama sekali) mungkin berasal dari beberapa header atau pustaka lain (kemungkinan besar mendahului penambahan int8_t
dan int32_t
di C99).
Biasa int
sedikit berbeda dari yang lain. Dimana int8_t
dan int32_t
masing-masing mempunyai ukuran tertentu, int
bisa berapapun size> = 16 bits. Pada waktu yang berbeda, 16 bit dan 32 bit sudah cukup umum (dan untuk implementasi 64-bit, mungkin 64 bit).
Di sisi lain, int
dijamin akan hadir dalam setiap implementasi C, di mana int8_t
dan int32_t
tidak. Mungkin terbuka untuk mempertanyakan apakah ini penting bagi Anda. Jika Anda menggunakan C pada sistem tertanam kecil dan / atau kompiler lama, mungkin ada masalah. Jika Anda menggunakannya terutama dengan kompiler modern pada mesin desktop / server, mungkin tidak.
Ups - melewatkan bagian tentang char
. Anda akan menggunakan int8_t
sebagai ganti char jika (dan hanya jika) Anda ingin tipe integer dijamin berukuran tepat 8 bit. Jika Anda ingin menyimpan karakter, Anda mungkin ingin menggunakannya char
. Ukurannya dapat bervariasi (dalam hal jumlah bit) tetapi dijamin persis satu byte. Namun ada satu keanehan: tidak ada jaminan apakah sebuah dataran char
ditandatangani atau tidak (dan banyak kompiler dapat menjadikannya salah satu, tergantung pada bendera waktu kompilasi). Jika Anda perlu memastikannya ditandatangani atau tidak, Anda perlu menentukannya secara eksplisit.
bool_t
- belum pernah mendengar yang itu sebelumnya. Standar C didefinisikan_Bool
sebagai tipe built-in.bool
ditentukan hanya jika Anda#include <stdbool.h>
(sebagai makro yang diperluas ke_Bool
).Tipe data _t adalah tipe typedef di header stdint.h, sedangkan int adalah tipe data fundamental bawaan. Ini membuat _t tersedia hanya jika stdint.h ada. int di sisi lain dijamin ada.
sumber
Ingatlah selalu bahwa 'size' adalah variabel jika tidak ditentukan secara eksplisit, jadi jika Anda mendeklarasikan
Pada beberapa sistem, ini dapat menghasilkan integer 16-bit oleh kompiler dan pada beberapa lainnya dapat menghasilkan integer 32-bit (atau integer 64-bit pada sistem yang lebih baru).
Di lingkungan yang disematkan, hal ini mungkin berakhir dengan hasil yang aneh (terutama saat menangani I / O yang dipetakan memori atau mungkin mempertimbangkan situasi array sederhana), jadi sangat disarankan untuk menentukan variabel ukuran tetap. Dalam sistem lama, Anda mungkin akan menemukannya
Mulai dari C99, desainer menambahkan file header stdint.h yang pada dasarnya memanfaatkan typedefs serupa.
Pada sistem berbasis windows, Anda mungkin melihat entri di file header stdin.h sebagai
Ada lebih dari itu seperti integer lebar minimum atau tipe integer lebar yang tepat, saya pikir itu bukan hal yang buruk untuk menjelajahi stdint.h untuk pemahaman yang lebih baik.
sumber
typedef short INT16;
bukantypedefs short INT16
.