Amaran: Perbandingan antara Ungkapan Integer Bertanda dan Tidak Bertanda
Pengenalan
Semasa mengerjakan Latihan 2-3 daripada "C Accelerated ," seorang pengguna menemui amaran pengkompil: "perbandingan antara ungkapan integer yang ditandatangani dan tidak ditandatangani." Isu ini timbul apabila membandingkan integer yang ditandatangani (int) dengan rentetan::size_type, jenis data yang biasa digunakan untuk panjang rentetan.
Punca Amaran
Amaran berlaku kerana jenis integer yang ditandatangani dan tidak ditandatangani mempunyai julat yang berbeza. Apabila membandingkan jenis ini, hasilnya mungkin tidak dijangka. Penyusun mengeluarkan amaran ini untuk memaklumkan pengaturcara tentang potensi hasil yang mengelirukan.
Amalan Disyorkan
Untuk mengelakkan isu ini, adalah dinasihatkan untuk menyatakan secara jelas sama ada integer ditandatangani atau tidak ditandatangani. Apabila membandingkan integer dengan panjang rentetan atau nilai lain yang tidak ditandatangani, isytiharkan integer sebagai int atau size_t tidak ditandatangani untuk memadankan jenis data yang dibandingkan. Ini memastikan bahawa perbandingan menghasilkan hasil yang diharapkan.
Kod Contoh
Dalam kod yang disediakan, padtopbottom hendaklah diisytiharkan sebagai unsigned int untuk memadankan rentetan::size_type variable c:
unsigned int padtopbottom; cin >> padtopbottom; unsigned int padsides; cin >> padsides; if (r == padtopbottom + 1 && c == padsides + 1) { // ... }
Tambahan Nota
Atas ialah kandungan terperinci Mengapa saya mendapat amaran 'perbandingan antara ungkapan integer yang ditandatangani dan tidak ditandatangani' dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!