Maison  >  Article  >  développement back-end  >  Quelles hypothèses infondées les programmeurs C/C font-ils souvent ?

Quelles hypothèses infondées les programmeurs C/C font-ils souvent ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 18:37:31753parcourir

What Unfounded Assumptions Do C/C   Programmers Often Make?

Quelles hypothèses non fondées existent dans les plates-formes C/C ?

Introduction

De nombreux programmeurs C et C novices et expérimentés fréquentent faire des hypothèses incorrectes qui conduisent à un code erroné. Reconnaître et remettre en question ces hypothèses sans fondement est crucial pour améliorer les pratiques de codage.

Recommandations de tests

Pour démontrer et remettre en question ces hypothèses, considérez le programme de test suivant qui examine diverses « conceptibles " hypothèses couramment formulées par les programmeurs :

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

Tests supplémentaires

  • Hypothèses entières :

    • Testez le comportement du complément à deux des entiers : (int_max 1) == (int_min) et (INT_MAX 1) == (INT_MIN)
    • Vérifiez si le dépassement est toujours sûr : (1 << bits_per_int) == 0 et (1 << BITS_PER_INT) == 0
    • Examinez si le décalage de gauche à droite fonctionne correctement, même pour les décalages négatifs : (t = -1, (15 << ; t) == 7)
  • Hypothèses de pointeur :

    • Test si void* peut stocker des pointeurs de fonction : sizeof (void*) >= sizeof(void(*)())
    • Hypothèses d'exécution :

      • Vérifier si la détection de la direction de croissance de la pile est fiable : check_grow(5, 0) != 0 et check_grow(5, 0) < 0
    • Hypothèses diverses :

      • Vérifiez si sizeof(char) est inférieur à sizeof(short), sizeof( short) est inférieur à sizeof(int), et sizeof(int) est inférieur à sizeof(long)
      • Déterminez si size_t et ptrdiff_t ont la même taille : sizeof(size_t) == sizeof(ptrdiff_t)
      • Examinez si l'évaluation de gauche à droite des sous-expressions est cohérente, même avec les appels de fonction : (ltr_fun(1) * ltr_fun(2) * ltr_fun(3) * ltr_fun(4), ltr_result == 1234)
    • Participation et développement collaboratif

      Pour contribuer au projet, pensez à ces plateformes :

      • Référentiel GitHub : https://github.com/lutherblissett/disenchanter
      • Discussion sur Stack Overflow : [lien vers la question originale sur Stack Overflow]

      En soumettant des correctifs ou en fournissant de nouvelles idées, vous pouvez contribuer à améliorer la précision et l'exhaustivité du programme de test.

      Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn