Heim >Backend-Entwicklung >C++ >Welche unbegründeten Annahmen machen C/C-Programmierer oft?

Welche unbegründeten Annahmen machen C/C-Programmierer oft?

Linda Hamilton
Linda HamiltonOriginal
2024-10-30 18:37:31832Durchsuche

What Unfounded Assumptions Do C/C   Programmers Often Make?

Welche unbegründeten Annahmen gibt es in C/C-Plattformen?

Einführung

Viele Anfänger und erfahrene C- und C-Programmierer häufig Machen Sie falsche Annahmen, die zu fehlerhaftem Code führen. Das Erkennen und Hinterfragen solcher unbegründeten Annahmen ist für verbesserte Codierungspraktiken von entscheidender Bedeutung.

Testempfehlungen

Um diese Annahmen zu demonstrieren und in Frage zu stellen, ziehen Sie das folgende Testprogramm in Betracht, das verschiedene „vorstellbare“ Tests untersucht "Annahmen, die häufig von Programmierern getroffen werden:

<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));
}

Zusätzliche Tests

  • Ganzzahlannahmen:

    • Testen Sie das Zweierkomplementverhalten ganzer Zahlen: (int_max 1) == (int_min) und (INT_MAX 1) == (INT_MIN)
    • Überprüfen Sie, ob Überschalten immer sicher ist: (1 << bits_per_int) == 0 und (1 << BITS_PER_INT) == 0
    • Überprüfen Sie, ob die Verschiebung von links nach rechts korrekt funktioniert, auch bei negativen Verschiebungen: (t = -1, (15 << ; t) == 7)
  • Zeigerannahmen:

    • Testen Sie, ob void* Funktionszeiger speichern kann: sizeof (void*) >= sizeof(void(*)())
    • Ausführungsannahmen:

      • Überprüfen Wenn die Erkennung der Stapelwachstumsrichtung zuverlässig ist: check_grow(5, 0) != 0 und check_grow(5, 0) < 0
    • Verschiedene Annahmen:

      • Überprüfen Sie, ob sizeof(char) kleiner als sizeof(short), sizeof( short) ist kleiner als sizeof(int) und sizeof(int) ist kleiner als sizeof(long)
      • Bestimmen Sie, ob size_t und ptrdiff_t die gleiche Größe haben: sizeof(size_t) == sizeof(ptrdiff_t)
      • Überprüfen Sie, ob die Auswertung von Unterausdrücken von links nach rechts konsistent ist, auch bei Funktionsaufrufen: (ltr_fun(1) * ltr_fun(2) * ltr_fun(3) * ltr_fun(4), ltr_result == 1234)
    • Partizipation und kollaborative Entwicklung

      Um zum Projekt beizutragen, ziehen Sie diese Plattformen in Betracht:

      • GitHub-Repository: https://github.com/lutherblissett/disenchanter
      • Stack-Overflow-Diskussion: [Link zur ursprünglichen Stack-Overflow-Frage]

      Indem Sie Patches einreichen oder neue Ideen bereitstellen, können Sie dazu beitragen, die Genauigkeit und Vollständigkeit des Testprogramms zu verbessern.

      Das obige ist der detaillierte Inhalt vonWelche unbegründeten Annahmen machen C/C-Programmierer oft?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn