Dalam C, perwakilan perangkap merujuk kepada corak bit yang sesuai dengan peruntukan memori jenis data tetapi mencetuskan tingkah laku yang tidak ditentukan apabila ditafsirkan sebagai nilai itu taip.
Salah satu contoh lazim bagi perwakilan perangkap ialah NaN isyarat (Bukan Nombor) dalam jenis titik terapung. Piawaian C99 secara eksplisit mentakrifkan gelagat isyarat NaN sebagai tidak ditentukan, walaupun gelagatnya dinyatakan dengan baik dalam piawaian lain.
Perwakilan perangkap juga boleh digunakan untuk C . Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa C memperkenalkan mekanisme keselamatan jenis tambahan yang mungkin menghalang beberapa operasi yang akan mengakibatkan kelakuan tidak ditentukan dalam C.
Dalam coretan kod yang disediakan:
float f = 3.5; int *pi = (int*)&f;
Dengan mengandaikan sizeof(int) == sizeof(float), f dan *pi tidak mempunyai perwakilan binari yang sama. Penukaran daripada apungan kepada int menggunakan hantaran penunjuk menghasilkan gelagat yang tidak ditentukan disebabkan oleh peraturan alias penunjuk. Untuk mengekstrak perwakilan integer apungan dengan betul, pendekatan berikut harus digunakan:
int extract_int(float f) { union { int i; float f; } u; u.f = f; return u.i; }
Walaupun kod ini mempunyai gelagat yang tidak ditentukan dalam C99, ia masih menghasilkan nilai integer yang sah yang bukan perwakilan perangkap.
Atas ialah kandungan terperinci Apakah Perwakilan Perangkap dalam C dan Bagaimanakah Ia Berbeza dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!