Section courante

A propos

Section administrative du site

Notes et apartés

stdlib.c

Le fichier stdlib.c, fourni sur la disquette de distribution, permet de définir les listes de types de retour et d'arguments des différentes fonctions de la bibliothèque standard. Il peut être utilisé comme suit :

lint stdlib module1 module2

Vous voudrez probablement adapter stdlib.c à vos propres goûts.

Plusieurs fichiers de définition de bibliothèque standard ont été placés sur la disquette de distribution pour certains compilateurs. Il s'agit notamment des fichiers suivants :

Fichier Decription
sl-c86.c Compilateur C86 de Computer Innovations
sl-desm.c Compilateur DeSmet C
sl-lc.c Compilateur Lattice C
sl-lc3.c Compilateur Lattice C 3.0
sl-mwc.c Compilateur Mark Williams
sl-msc.c Compilateur Microsoft C 3.0/4.0
sl-aztec.c Compilateur Aztec C de Manx Software.

Utilise l'un de ces fichiers (renommé de manière appropriée si nécessaire) à la place de stdlib.c, le cas échéant. À noter que le nom «stdlib.c» n'est pas utilisé en interne par PC-Lint et peut être renommé, si nécessaire, par un nom plus facile à mémoriser ou à saisir.

Manque d'espace mémoire

En cas de dépassement de capacité de la pile, vous pouvez augmenter sa taille en ajoutant le paramètre `=n` (où `n` est une constante entière) à la ligne de commande. `n` spécifie la taille de la pile (4096 par défaut). Par exemple :

lint =8000 arguments

Augmente la taille de la pile de 8 000. Ce paramètre est le seul ne pouvant pas être placé dans un fichier indirect (un fichier avec l'extension .lnt).

Si vous dépassez la mémoire disponible (erreur 402), vous pouvez essayer de séparer les fonctions du préprocesseur du reste du traitement. Par exemple, si un programme est composé des modules m1.c, m2.c et m3.c, les commandes suivantes :

lint -p -v m1 > m1.p
lint -p -v m1 > m2.p
lint -p -v m1 > m3.p
lint -e725 m1.p m2.p m3.p

Cette méthode consomme moins de mémoire vive que l'application directe de l'analyse statique aux modules. Notez que la sortie du préprocesseur n'est pas formatée, ce qui empêche la vérification de l'indentation (725).

Si cette méthode échoue, vous pouvez essayer d'analyser les modules par groupes. Par exemple, si votre application contient 100 modules, essayez d'en analyser une cinquantaine avec l'option `-u`. Cette méthode semble donner de bons résultats.

Gestion des chemins d'accès aux fichiers INCLUDE

La variable d'environnement INCLUDE permet de spécifier un chemin de recherche pour les fichiers d'entête (fichiers #include). Par exemple :

set INCLUDE=b:\include;d:\extra

Indique que, si la recherche d'un fichier d'entête échoue dans le répertoire courant, une recherche sera effectuée dans le répertoire b:\include et, en cas d'échec, dans le répertoire d:\extra.

Remarques :

Taille des scalaires

Puisque l'utilisateur de PC-Lint peut définir la taille de divers objets de données (voir l'option `-s...`), on peut se demander quel serait l'effet de l'utilisation de tailles inhabituelles.

La taille des scalaires n'a qu'un impact modeste sur le comportement de PC-Lint. Ceci est normal, car la correction d'un programme écrit dans un langage de haut niveau ne devrait pas être fortement affectée par les caractéristiques de la machine sur laquelle il est exécuté. Cette section a pour but de répertorier les cas où la taille des objets est utilisée pour déterminer les messages d'erreur à afficher.

Longueur des champs - La taille des champs de bits (dans les structures) est limitée au nombre de bits d'un entier (int). Ce nombre est le produit des deux quantités spécifiées par les options `-s1#` et `-sb#`.

Constantes entières - Les constantes entières (ni hexadécimales ni octales) supérieures à l'entier maximum, qui est :

2 ** (sizeof(int) * bits-par-octet - 1) - 1

sont considérées comme des entiers longs (long). Les constantes octales ou hexadécimales sont considérées comme des entiers (int) à condition qu'elles ne dépassent pas :

2 ** (sizeof(int) * bits-par-octet) - 1

Les quantités en question sont contrôlées par les options `-s1#` et `-sb#`.

Conversions - Lors des conversions de nombres entiers en pointeurs et inversement, les conversions entraînant une perte d'information sont parfois signalées. On considère qu'il y a perte d'information lorsqu'un objet de données est converti en un objet de taille inférieure. Les options concernées sont `-sp#`, `-sl#` et `-si#`.

Comparaison des arguments - Pour utiliser l'option -eas, il est nécessaire de connaître la taille des quantités transmises. Cela concerne principalement les options -si#, -sl et -sd.

Problèmes courants

Une erreur fréquente consiste à placer les options de PC-Lint dans un commentaire d'un programme C et à oublier d'y ajouter une analyse de code. Par exemple :

  1. /*    -e501   */

n'a aucun effet. Le format correct est :

  1. /*lint -e501 */

Assurez-vous également qu'aucun espace ne précède immédiatement «lint».

Une autre erreur possible consiste à mélanger les modèles de mémoire. La séquence :

lint stdlib -mL alpha

Cela produira presque certainement des messages d'erreur car les pointeurs dans stdlib.c sont petits et les pointeurs dans alpha.c sont considérés comme grands.



Dernière mise à jour : Lundi, le 6 avril 2026