Apabila Dennis Ritchie mencipta C, dia menjadikan int (jenis integer bertanda) sebagai jenis lalai. saiz (bilangan bit) int sengaja tidak dinyatakan. Walaupun apabila C diseragamkan, semua yang dijamin ialah saiz minimum. Rasionalnya ialah saiz int mestilah saiz perkataan "semulajadi" untuk integer pada CPU tertentu.
Jika anda hanya memerlukan integer bertanda yang lebih kecil dan ingin menjimatkan sedikit ruang, Ritchie memberi kami ringkasan; atau, jika anda memerlukan integer yang lebih besar, dia memberi kami panjang. (C99 memberi kami integer yang lebih besar dengan panjang yang panjang.) Jika anda hanya memerlukan integer yang tidak ditandatangani, anda boleh memasukkan yang tidak ditandatangani dalam pengisytiharan. C99 juga memberi kami alias jenis integer bertanda bersaiz khusus (mis., int32_t) dan alias jenis tidak bertandatangan (mis., uint32_t).
Walau bagaimanapun, dalam pengaturcaraan, integer negatif (dengan itu memerlukan jenis integer yang ditandatangani), tidak diperlukan pada kebanyakan masa. Panjang rentetan, kiraan objek, saiz objek, saiz fail, dsb., semuanya adalah integer yang tidak ditandatangani. Alias jenis bersaiz khusus diperlukan walaupun kurang daripada integer yang ditandatangani.
Namun saya telah melihat banyak kod yang menggunakan jenis integer secara tidak sesuai. Kod sedemikian boleh menyampaikan sama ada maklumat yang kurang dinyatakan atau mengelirukan kepada pembaca (termasuk diri anda dalam masa beberapa bulan). Sebaiknya pilih jenis integer yang betul untuk tujuan yang betul.
Berikut ialah garis panduan saya untuk memilih jenis integer:
Ini ialah jenis yang digunakan oleh kedua-dua pustaka standard C dan C++, cth., oleh memcpy(), strlen(), std::string::size(), dsb., jadi terdapat banyak preseden.
Jika anda berurusan dengan sangat fail besar, pada sesetengah platform, anda mungkin perlu menyusun dengan -D_FILE_OFFSET_BITS=64 untuk mendapatkan versi 64-bit off_t.
Ini juga jenis yang digunakan oleh kedua-dua perpustakaan standard C dan C++, cth., oleh fread() dan fwrite().
Satu-satunya masa anda biasanya perlu integer bersaiz tetap ialah apabila anda "mengeluarkan" nilai, cth., menulisnya ke cakera atau menghantarnya melalui soket.
Menggunakan integer bersaiz tetap apabila anda sebenarnya tidak memerlukan bilangan bit tertentu menyampaikan maklumat yang salah kepada pembaca.
Tambahan pula:
Apabila mewakili nilai integer yang mesti menjadi saiz tepat penunjuk, gunakan sama ada alias jenis intptr_t atau uintptr_t standard.
Hanya jika anda memerlukan nilai negatif, gunakan salah satu nilai pendek, int, panjang atau panjang panjang dengan int diutamakan melainkan anda memerlukan nilai yang lebih kecil atau lebih besar.
Akhir sekali:
Iaitu, melainkan anda berurusan dengan salah satu daripada kes yang disenaraikan di atas, lalai menggunakan jenis yang tidak ditandatangani.
Memilih jenis integer yang betul menyampaikan maklumat yang betul kepada pembaca dan boleh menghapuskan semakan masa jalan.
Pada asalnya, dan sehingga C99, int ialah jenis tersirat, iaitu jika anda tidak menyatakan sebarang jenis sama sekali, ia difahamkan sebagai int. Contohnya:
power( x, n ) /* x and n are int; returns int */ { int p; for ( p = 1; n > 0; --n ) p *= x; return p; }
mentakrifkan fungsi yang mempunyai parameter int dan mengembalikan int, namun int tidak digunakan dalam pengisytiharan.
Prototaip fungsi telah dialihkan kembali daripada C++ ke C89, namun takrifan fungsi "gaya K&R" asal masih dibenarkan sehingga C23. Jawatankuasa ANSI C ialah kumpulan konservatif.
Lebih pelik lagi, pra-C99 juga membenarkan int tersirat dalam pengisytiharan seperti:
i; // int i *p; // int *p *a[4]; // int *a[4] *f(); // int *f()
Nasib baik, pengisytiharan sebegitu telah lama menyalahi undang-undang.
Atas ialah kandungan terperinci Memilih Jenis Integer yang Sesuai dalam C dan C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!