quote

Une chaine doit être terminée avec des guillemets

String constants must end with a double quote

 

Jusque là rien de nouveau, excepté que j’ai rencontré cette erreur de compilation lors du test de la build que j’ai mis en place récemment sur notre nouveau serveur… de build.

Bien évidemment ce fut une surprise totale car je me suis basé pour cela sur un sln existant qui lui compile parfaitement.

Après un rapide saut vers les deux fichiers incriminés, je reste circonspect en lisant les lignes suivantes :

 Sub Main()         

 

 Dim chaine As String
 chaine = "Test"
 Select Case chaine

 

        Case "Valeur 1
           Console.WriteLine("It works")

 

        Case "Valeur 2
           Console.WriteLine("It works")

 

    End Select
 End Sub

 

Comme vous pouvez le constater les chaines ne sont pas délimitées avec une quote fermante. J’ai donc rapidement pensé à un problème d’encodage peut être du à la récente migration de TFS 2005 vers TFS 2010. Et bien non, le code montré ci-dessus compile parfaitement !

Le compilateur de Visual Basic valide sans aucun problème ce type de code, très certainement pour des raisons historiques. Surprenant non ?

Note 1 : Non je n’ai pas réussi à trouver la raison historique pour laquelle cela est possible.

Note 2 : Oui le compilateur présent sur le serveur de build réagit différemment que celui présent sur le poste de dév alors que je devrais à priori avoir la même version (Team Build SP1 sur le serveur, et VS 2010 SP1 sur les postes de dév). Je suppute que cette différence de comportement doit être lié au paramétrage de MS Build.

[Update] Merci à Sébastien qui a réussi à trouver la raison historique pour laquelle une chaine peut ne pas être terminée par une double quote en VB !

4 réflexions au sujet de « Une chaine doit être terminée avec des guillemets »

  1. Sebastien LEBRETON

    Pour info,

    http://stackoverflow.com/questions/2906433/visual-studio-does-not-flag-unterminated-string-constant-in-vb-net

    « Actually, historically, the BASIC language never REQUIRED a closing quote. This dates back to the 70’s. GW-Basic, BasicA, QBASIC, QuickBasic, even older Tandy and TRS-80 computers NEVER required a closing quote. This is nothing new. The reason for this is because BASIC is not a free flow language, like C or C#. This means that whenever a newline is found, BASIC knows that your string must end, quoted or not. Microsoft has purposely not enforced this rule in order to be compatible with older code. »

    ++

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *