> Tech > Pourquoi ne pouvez-vous pas spécifier LIB/OBJ dans une variable ?

Pourquoi ne pouvez-vous pas spécifier LIB/OBJ dans une variable ?

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

A votre avis, pourquoi est-il nécessaire de compiler un programme CL ? Tout simplement parce que CL supporte des variables. Sous le capot, chaque variable est en réalité une référence à une zone de mémoire différente où l’ordinateur stocke toute son information. Dans un programme CL, la commande doit

être interprétée d’après les variables qui se trouvent dans toutes ces zones de mémoire différentes, au lieu d’analyser syntaxiquement une chaîne de commandes toutes tapées ensemble dans un endroit. Le code compilé fait très bien cela. Et les programmes CL sont alors un peu plus rapides que si l’on faisait la même chose à l’invite de commande.

Quand vous songez aux variables que vous devez passer à une commande telle que RUNQRY, vous devez vous demander : qu’est-ce que le compilateur CL attend de ma part ? Si vous codez une variable pour le paramètre OUTFILE(), le compilateur s’attend à ce que ce paramètre soit le nom de l’objet. Vous ne pouvez pas simplement lui ajouter une bibliothèque et espérer qu’il sait cela : en l’occurence, la bibliothèque fait partie de cette variable. La seule chose que le compilateur CL sait est que la première variable que vous passez est le nom d’objet. Quel que soit le contenu de cette variable, il est copié dans le paramètre nom d’objet du CPP pour cette commande. Pour qu’une partie des données soit passée au paramètre bibliothèque du CPP, le compilateur CL attend de vous que vous spécifiiez une variable séparée.

Vous devez donc faire ce qu’il attend. Cependant, il y a quelques possibilités de contournement. Tout d’abord, vous pouvez, par programme, diviser le paramètre en deux variables séparées et les passer. Pour cela, recherchez par balayage le caractère « / ». S’il existe, mettez tout ce qui se trouve à sa gauche dans une variable et tout ce qui se trouve à sa droite dans une seconde variable. Passez ces deux variables comme le nom de bibliothèque et d’objet. Le programme de la figure 1 démontre cette technique. Deuxièmement, au lieu de vous battre avec le compilateur CL, créez manuellement la chaîne de commandes en copiant les valeurs des variables. Vous pouvez créer une chaîne de commandes dans une instruction CHGVAR, y concaténer les variables puis l’exécuter avec QCMDEXC. QCMDEXC analysera la chaîne de commandes au moment de l’exécution, exactement comme elle le fait quand vous la tapez sur la ligne de commande. Le programme de la figure 2 démontre cette technique.

Par Scott Klement

Téléchargez cette ressource

Préparer l’entreprise à l’IA et aux technologies interconnectées

Préparer l’entreprise à l’IA et aux technologies interconnectées

Avec la « quatrième révolution industrielle », les environnements hyperconnectés entraînent de nouveaux risques en matière de sécurité. Découvrez, dans ce guide Kaspersky, comment faire face à cette nouvelle ère de vulnérabilité.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010