Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah Andaian Tidak Berasas Yang Sering Dibuat Pengaturcara C/C?

Apakah Andaian Tidak Berasas Yang Sering Dibuat Pengaturcara C/C?

Linda Hamilton
Linda Hamiltonasal
2024-10-30 18:37:31753semak imbas

What Unfounded Assumptions Do C/C   Programmers Often Make?

Apakah Andaian Tidak Asas Wujud dalam Platform C/C?

Pengenalan

Ramai pengaturcara C dan C yang baru dan berpengalaman kerap membuat andaian yang salah yang membawa kepada kod yang salah. Menyedari dan mencabar andaian tidak berasas sedemikian adalah penting untuk amalan pengekodan yang dipertingkatkan.

Cadangan Ujian

Untuk menunjukkan dan mencabar andaian ini, pertimbangkan program ujian berikut yang meneliti pelbagai "boleh difikirkan " andaian yang biasa dibuat oleh pengaturcara:

<code class="c">#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>

int main() {
    // Character-related Assumptions
    EXPECT("00: ASCII is consistent", ('A' == 65));
    EXPECT("01: A-Z forms a contiguous block", (('Z' - 'A') + 1 == 26));
    EXPECT("02: Uppercase letters precede lowercase letters", ('A' < 'a'));
    EXPECT("03: A character is 8 bits", (CHAR_BIT == 8));
    EXPECT("04: Characters are signed", (CHAR_MIN == SCHAR_MIN));
}

Ujian Tambahan

  • Andaian Integer:

    • Uji kelakuan pelengkap kedua-dua integer: (int_max 1) == (int_min) dan (INT_MAX 1) == (INT_MIN)
    • Sahkan jika overshifting sentiasa selamat: (1 << bits_per_int) == 0 dan (1 << BITS_PER_INT) == 0
    • Periksa jika peralihan kiri ke kanan berfungsi dengan betul, walaupun untuk anjakan negatif: (t = -1, (15 << ; t) == 7)
  • Andaian Penunjuk:

    • Uji jika void* boleh menyimpan penunjuk fungsi: sizeof (void*) >= sizeof(void(*)())
    • Andaian Pelaksanaan:

      • Semak jika mengesan arah pertumbuhan tindanan boleh dipercayai: check_grow(5, 0) != 0 dan check_grow(5, 0) < 0
    • Pelbagai Andaian:

      • Sahkan jika sizeof(char) kurang daripada sizeof(short), sizeof( pendek) adalah kurang daripada sizeof(int), dan sizeof(int) adalah kurang daripada sizeof(long)
      • Tentukan jika size_t dan ptrdiff_t mempunyai saiz yang sama: sizeof(size_t) == sizeof(ptrdiff_t)
      • Periksa sama ada penilaian kiri-ke-kanan bagi subungkapan adalah konsisten, walaupun dengan panggilan fungsi: (ltr_fun(1) * ltr_fun(2) * ltr_fun(3) * ltr_fun(4), ltr_result == 1234)
    • Penyertaan dan Pembangunan Kolaboratif

      Untuk menyumbang kepada projek, pertimbangkan platform ini:

      • Repositori GitHub: https://github.com/lutherblissett/disenchanter
      • Perbincangan Limpahan Tindanan: [pautan kepada soalan Limpahan Tindanan yang asal]

      Dengan menyerahkan tampalan atau memberikan idea baharu, anda boleh membantu mempertingkat ketepatan dan kekomprehan program ujian.

      Atas ialah kandungan terperinci Apakah Andaian Tidak Berasas Yang Sering Dibuat Pengaturcara C/C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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