Heim > Backend-Entwicklung > C++ > Hauptteil

Trifft Ihr C/C-Code ungerechtfertigte Annahmen?

Mary-Kate Olsen
Freigeben: 2024-10-31 04:22:31
Original
410 Leute haben es durchsucht

 Is Your C/C   Code Making Unwarranted Assumptions?

Demonstrieren ungerechtfertigter Annahmen in C/C

Wie kann dieses Lehrmittel verbessert werden?

Um die Wirksamkeit von zu erhöhen Beachten Sie bei diesem Tool die folgenden Vorschläge:

  • Bedingte Kompilierung integrieren: Verwenden Sie die bedingte Kompilierung, um Annahmen basierend auf bestimmten Plattformeigenschaften zu testen. Wenn Ihr Testprogramm beispielsweise auf bestimmten plattformabhängigen Funktionen basiert, können Sie #ifdef oder #if __GNUC__ verwenden, um die Tests an verschiedene Compilerumgebungen anzupassen.
  • Erweitern Sie die Testfälle: Beziehen Sie eine größere Vielfalt an Testfällen ein, um häufigere Annahmen von Programmierern abzudecken. Beispiele könnten sein:

    • „Gleitkomma-Arithmetik ist assoziativ“
    • „Die Größe einer Lücke* entspricht der Größe der kleinsten adressierbaren Einheit“
    • "Das Vorzeichen einer negativen Zahl ist immer -"
  • Automatisieren Sie die Tests: Erstellen Sie ein Skript oder automatisiertes Tool, um die Tests auszuführen und die Ergebnisse zu sammeln verschiedene Plattformen. Dies wird den Testprozess rationalisieren und es einfacher machen, die Datenbank der Plattformunterschiede zu pflegen.

Welche Tests wären gut und wie sollten sie aussehen?

1. Zeichenannahmen:

  • Test:Überprüfen Sie, dass „A“ == 65 auf allen Plattformen ist.
  • Code:

    <code class="c">EXPECT("00 we have ASCII",('A'==65));</code>
    Nach dem Login kopieren
    Nach dem Login kopieren
  • Test: Überprüfen Sie, ob die Annahme, dass 'a' < 'A' ist gültig.
  • Code:

    <code class="c">EXPECT("02 big letters come before small letters",('A'<'a'));
    Nach dem Login kopieren
  • Test:Test wenn die Größe von char immer 8 Bit beträgt.
  • Code:

    <code class="c">EXPECT("04 a char is 8 bits",CHAR_BIT==8);
    Nach dem Login kopieren

2. Ganzzahlige Annahmen:

  • Test: Untersuchen Sie, ob die Annahme, dass ganze Zahlen die Zweierkomplementdarstellung verwenden und umlaufen, gültig ist.
  • Code:

    <code class="c">EXPECT("06 integers are 2-complement and wrap around",(int_max+1)==(int_min));
    Nach dem Login kopieren
  • Test:Überprüfen Sie, ob die Behauptung, dass die Größe eines int mit der Größe von a übereinstimmt void* gilt auf allen Plattformen.
  • Code:

    <code class="c">EXPECT("05 int has the size of pointers",sizeof(int)==sizeof(void*));
    Nach dem Login kopieren

3 . Zeigerannahmen:

  • Test: Überprüfen Sie, ob sizeof(void*) immer größer oder gleich sizeof(void(*)()) ist.
  • Code:

    <code class="c">EXPECT("10 void* can store function pointers",sizeof(void*)>=sizeof(void(*)()));</li>
    </ul>
    <p><strong>4. Ausführungsannahmen:</strong></p>
    <ul>
    <li>
    <strong>Test:</strong>Testen Sie, ob der Stapel immer nach unten wächst.</li>
    <li>
    <p><strong>Code:</strong></p>
    <blockquote><pre class="brush:php;toolbar:false"><code class="c">EXPECT("12 the stack grows downwards",check_grow(5,0)<0);</code>
    Nach dem Login kopieren
  • Test: Untersuchen Sie die Annahme, dass die Auswertung von Ausdrücken immer von links nach rechts erfolgt.
  • Code:

    <code class="c">EXPECT("00 we have ASCII",('A'==65));</code>
    Nach dem Login kopieren
    Nach dem Login kopieren

Würden Sie die Tests auf den Plattformen durchführen, die Sie in die Finger bekommen, und die Ergebnisse veröffentlichen?

Wir Förderung der Beteiligung der Community am Testen der Annahmen auf verschiedenen Plattformen. Bitte teilen Sie Ihre Ergebnisse zusammen mit den folgenden Informationen:

  • Plattformdetails (Betriebssystem, Compilerversion, Architektur)
  • Alle beobachteten Unterschiede zu den erwarteten Ergebnissen
  • Warum Die Unterschiede können auftreten (z. B. Compiler-Optimierungen, plattformspezifische Implementierung)

Das obige ist der detaillierte Inhalt vonTrifft Ihr C/C-Code ungerechtfertigte Annahmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage