PrécédentSommaire

Des rustines

Ayant regardé les nouvelles orientations vers lesquelles se dirige le futur standard du langage C (C9X), je me demande pourquoi il ne parait pas y être question d'une option qui permettrait des vérifications automatiques proches de celles du Pascal à l'exécution, comme par exemple les dépassements des indices des tableaux. Ceci permettrait en effet de dégrossir rapidement le travail dans une étape initiale de mise au point en interrompant le déroulement du programme dès le premier débordement. Ce ne serait qu'une option, puisque la vitesse est recherchée en C, et il me semble que le compilateur devrait afficher un message indiquant son activation.

L'utilité apparaîtrait par exemple dans le cas où une variable caractère (char) est utilisée comme indice d'un tableau en oubliant que généralement ce type est signé : le résultat est qu'au lieu d'avoir un positionnement de l'indice allant de 0 à 255 comme on s'y attend, il est de -128 à 127. Inutile de préciser qu'une écriture sur un "élément" d'indice négatif (alors que les tableaux commencent toujours à 0 en C) atteint en fait une autre variable qui se situe avant en mémoire ou même le contenu de la pile du programme. Par contre, là il faudrait sans doute traiter différemment l'utilisation de tableaux et l'arithmétique explicite sur les pointeurs, qui permet une gymnastique très employée.

De même, un test de concordance avec des limites au moment d'une affectation à une variable de type énuméré (qui sont généralement codées sur la taille d'un int) rendrait des services. Des variables non initialisées peuvent être repérées de cette façon. Je ne crois pas qu'il soit possible de verrouiller les extensions de valeurs qui découlent des règles de conversions implicites entre types de tailles différentes sans contredire exagérément certaines particularités du langage, bien que cela puisse créer des problèmes (j'ai testé pour vous). Cependant, dans l'autre sens, la troncature d'une donnée, qui implique une perte d'information, pourrait avantageusement être contrôlée de cette manière. Dans les cas où la perte serait prévue, il suffirait de placer une conversion de type explicite pour indiquer au compilateur de ne pas bloquer cette possibilité à cet endroit du programme. Pour une maîtrise fine des vérifications, de nouveaux #pragma pourraient aussi être ajoutés, comme "on", "off", et retour à la valeur par défaut.

C'est de leur immédiateté que de tels contrôles tirent leur intérêt, tout comme pour les erreurs montrées par le compilateur. Il vaut mieux que l'exécution soit stoppée à l'instant même où l'anomalie se produit plutôt que de s'apercevoir tardivement qu'une variable a une valeur incongrue et de devoir remonter le cours des événements.