Je le savais que ça branlait dans le manche à ce niveau là !

La :cocci: Coccinelle voit rouge avec ses derniers points noirs, aussi elle a besoin de vous !
 Windows 10 Firefox  Avatar de l’utilisateur
Coccinelle France
Administrateur
Administrateur
Au moins 1000 messages à son actif

Messages : 1324
Inscrit depuis : 2 ans 5 mois
-->
Localisation : Centre France
Contact :
Auteur du sujet

N°5655

Message non lu par Coccinelle »

Je le savais que ça branlait dans le manche à ce niveau là !
(j'aime bien les titres mystérieux, ça pousse à lire :sansdent:)

Figurez-vous que depuis que je prépare le cocci-kit, ça fait donc........ ouh la la...... au moins ça...... je suis régulièrement tombé nez à nez avec des bugs totalement incompréhensibles, de purs plantages en fait, lors de la rédaction de scripts qui parfois n'avaient que 3 lignes. Tout était bon, la syntaxe et tout et tout. Donc pour comprendre sur quelle ligne ça coinçait, il fallait les commenter une à une, relancer le script, et voir ou ça coinçait. Quand ça ne fonctionnait toujours pas, il fallait non plus commenter mais supprimer les lignes une à une, et recommencer le processus de débogage. Et là, que ne constate-je pas : que  ce sont des lignes de commentaires qui sont capables de faire planter un script !!! 

Mais comment se fesse ?


J'avais un (très) vague souvenir d'avoir déjà lu le pourquoi du comment, mais là j'ai eu un flash suite à de nouveaux plantages pour la même raison, car je ne me souvenais plus du truc. J'ai donc fait quelques recherches avec mon ami Google en me basant sur mon flash (🎼 pour le jour, flash pour la nuit, sans mise au point c'est reparti... 🎶) :

 "::" instead of "REM" inside a batch file 


Les batchiens ont-ils percuté où je veux en venir ? Je développe.

Dans un fichier batch,  REM  en début de ligne introduit un commentaire (REMark en anglais). Une alternative consiste toutefois à ajouter  ::  au début d'une ligne à la place d'un REM pour un effet similaire et un code plus lisible. Les deux-points agissent comme un GOTO ou un CALL :label, mais comme le deuxième deux-points n'est pas valide en tant que nom de label, il est toujours traité comme un label sans effet, et donc la ligne est toujours ignorée. Comme elle le serait pour un simple REM.

Le gros avantage du double point :

✅ Un  ::  est traité plus rapidement qu'un  REM  (58µ contre 360µs par ligne de commentaire).

Le gros avantage du REM :

✅ Un commentaire  REM  est une commande documentée qui peut être utilisée presque n'importe où dans une ligne de commande.

❌ La grosse conséquence au désavantage du  ::  :

Lorsque  ::  est utilisé pour marquer un commentaire dans un bloc de code entre parenthèses, le processeur de commandes s'attend raisonnablement à ce que chaque étiquette soit suivie d'au moins une commande. En fait, le shell CMD tente d'exécuter la deuxième ligne même si elle est formatée en étiquette. Tout ce qui n'est pas une commande valide, même une ligne vide ou une parenthèse fermante, fera donc échouer un commentaire de style  :: , concrètement le script se termine brutalement et sans prévenir comme s'il avait été fermé par une commande EXIT. Et voilà d'où venaient mes insidieux plantages... Pétard que je suis heureux d'avoir redécouvert ça !

Un exemple tout simple à tester : ce script va planter dès qu'il atteindra le commentaire :

Code : Tout sélectionner

(
Echo Salut les coccinautes !
:: C'était un message d'amour
)
Pour fonctionner, le script doit être réécrit, deux possibilités sont alors offertes :

Code : Tout sélectionner

(
Echo Salut les coccinautes !
REM C'était un message d'amour
)

Code : Tout sélectionner

(
Echo Salut les coccinautes !
:: c'était un message d'amour
Echo Vous allez bien ?
)
Voilà ma pensée du jour !

Site web de SS64

Plus d'infos sur REM
https://ss64.com/nt/rem.html
Mon Autre Site :
Image