Heim  >  Artikel  >  Backend-Entwicklung  >  Trifft Ihr C/C-Code ungerechtfertigte Annahmen?

Trifft Ihr C/C-Code ungerechtfertigte Annahmen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-31 04:22:31411Durchsuche

 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>
  • 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'));
  • 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);

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));
  • 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*));

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>
  • 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>

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!

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