Rumah > pembangunan bahagian belakang > C++ > Apakah Perwakilan Perangkap dalam C dan Bagaimanakah Ia Berbeza daripada Tingkah Laku Tidak Ditakrifkan?

Apakah Perwakilan Perangkap dalam C dan Bagaimanakah Ia Berbeza daripada Tingkah Laku Tidak Ditakrifkan?

Barbara Streisand
Lepaskan: 2024-12-20 00:02:14
asal
580 orang telah melayarinya

What are Trap Representations in C and How Do They Differ from Undefined Behavior?

Perwakilan Perangkap dalam C: Satu Penghuraian

Apakah itu Perwakilan Perangkap?

C99 memperkenalkan istilah "perwakilan perangkap" untuk menerangkan corak bit yang menduduki saiz jenis tetapi mencetuskan yang tidak ditentukan tingkah laku jika digunakan sebagai nilai jenis itu. Kewujudan corak ini adalah pilihan, kecuali char yang tidak ditandatangani, yang dijamin untuk mengelakkannya.

Salah satu contoh perwakilan perangkap ialah NaN isyarat dalam jenis titik terapung. Tingkah lakunya tidak ditentukan dalam C99, walaupun IEC 60559 menentukan pengendaliannya.

Petunjuk Null dan Perwakilan Perangkap

Walaupun jenis penuding boleh memiliki perwakilan perangkap, penunjuk nol tidak dianggap sedemikian. Tingkah laku yang tidak ditentukan hanya timbul apabila ia dinyahrujuk atau diimbangi. Perwakilan perangkap, sebaliknya, menyebabkan gelagat yang tidak ditentukan apabila operasi bacaan mudah dengan jenis wakilnya.

Gelagat Tidak Ditakrifkan vs. Perwakilan Perangkap

Kod yang anda berikan mempamerkan tidak ditentukan tingkah laku disebabkan oleh peraturan alias penunjuk, bukan perwakilan perangkap. Untuk menukar apungan dengan betul kepada int dengan perwakilan yang sama, gunakan coretan kod berikut:

int extract_int(float f)
{
    union { int i; float f; } u;
    u.f = f;
    return u.i;
}
Salin selepas log masuk

Kod ini mempamerkan gelagat yang tidak ditentukan dalam C99, di mana nilai integer tepat yang dihasilkan tidak ditakrifkan, tetapi integer yang sah hasilnya dijamin. Ia bukan perwakilan perangkap dan tidak boleh dioptimumkan berdasarkan andaian tentang ketiadaannya.

Atas ialah kandungan terperinci Apakah Perwakilan Perangkap dalam C dan Bagaimanakah Ia Berbeza daripada Tingkah Laku Tidak Ditakrifkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan