Casting dalam bahasa C itu unik, tidak seperti bahasa lain. Itu juga tidak pernah cerdas.
Casting dalam C mengkonversi nilai dari satu tipe ke tipe lainnya menggunakan aturan yang didefinisikan dengan cermat. Jika Anda benar-benar perlu tahu, baca standarnya. Kalau tidak, poin utamanya adalah:
- Konversi antara tipe integer mempertahankan nilai, jika memungkinkan. Jika tujuan memiliki lebih banyak bit, ini melebar dan umumnya aman, tetapi mungkin melibatkan ekstensi tanda. Jika lebih sempit, bit akan hilang.
- Konversi antara jenis pointer mempertahankan nilai pointer, tetapi hasilnya sering tidak terdefinisi, seringkali tidak portabel dan sering berguna untuk skenario lanjutan.
- Konversi antara tipe integer dan pointer OK jika integer cukup besar, dan mempertahankan pola bit (apa pun yang mungkin terjadi artinya). Jika bilangan bulat terlalu kecil, hasilnya tidak jelas tetapi tidak berguna. Sebagai aturan 'panjang' cukup lebar untuk 'void *', tetapi tidak ada jaminan! Pointer yang dibuat dengan cara ini mungkin tidak valid, dengan segala macam cara yang menarik.
- Konversi antara tipe float dan integer adalah konversi aritmatika sebagaimana didefinisikan oleh rutin pustaka yang sesuai (dengan pemotongan, bukan pembulatan).
- Anda dapat membuang nilai kembali fungsi untuk membatalkan. Saya tidak pernah. Tidak melakukan apa-apa.
Beberapa gips diterapkan secara implisit, dan dalam beberapa gips kompiler akan mengeluarkan peringatan. Yang terbaik untuk memperhatikan peringatan!
Definisi kamus untuk pemain paling baik diabaikan, karena tidak membantu. Banyak pemeran yang lebih baik dideskripsikan dengan istilah konversi atau pemaksaan, jadi perlu juga diketahui.
C ++ jauh lebih rumit, tetapi Anda tidak menanyakan itu, bukan?