Rumah > pembangunan bahagian belakang > C++ > Mengapa saya mendapat amaran 'perbandingan antara ungkapan integer yang ditandatangani dan tidak ditandatangani' dalam C ?

Mengapa saya mendapat amaran 'perbandingan antara ungkapan integer yang ditandatangani dan tidak ditandatangani' dalam C ?

Barbara Streisand
Lepaskan: 2024-11-10 13:00:03
asal
814 orang telah melayarinya

Why do I get a

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) {
    // ...
}
Salin selepas log masuk

Tambahan Nota

  • Dengan mengisytiharkan integer sebagai tidak ditandatangani, anda mengelakkan kemungkinan tingkah laku yang tidak dijangka apabila membandingkannya dengan panjang rentetan.
  • Jenis yang tepat untuk digunakan sebagai perbandingan bergantung pada jenis data yang sedang anda gunakan.
  • Dalam kes Linux Mint, string::size_type biasanya ditakrifkan sebagai unsigned int, menjadikan perbandingan selamat. Walau bagaimanapun, masih merupakan amalan yang baik untuk mengisytiharkan integer secara eksplisit.
  • Buku "Accelerated C " memang merangkumi topik yang berkaitan dengan pengendalian jenis data tetapi mungkin tidak memberikan penjelasan menyeluruh tentang perbandingan antara jenis yang ditandatangani dan yang tidak ditandatangani.

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!

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