2015-08-04 5 views
0

Lors de la compilation d'un morceau de code comme ceci:Delphi: commande 'GoTo' ne compile pas à l'intérieur 'avec'

01 function MyGotoDecision: boolean; 
02 begin 
03 {code ...} 
04 end; 
05 
06 procedure TForm1.Button1Click(Sender: TObject); 
07 label MyLabel; 
08 begin 
09 with Application do 
10 begin 
11  {code ...} 
12  if MyGotoDecision then 
13  goto MyLabel; 
14  {more code ...} 
15 end; 
16 MyLabel: 
17  {more code ...} 
18 end; 

Je reçois ce message d'erreur étrange compilateur:

'Void' does not contain a member named 'MyLabel' at line 13 

Si je retire la ligne 'avec', l'erreur disparaît.

Dans mon vrai programme, la commande 'goto' sera utilisée pour sortir d'un code fortement imbriqué, où la logique de sortie en toute sécurité est tortueuse.

Toute aide serait appréciée.

Editer: Je viens de découvrir que Delphi compile correctement le code. Mais l'erreur de message est toujours affichée dans la vue Structure.

+0

Je ne peux pas reproduire. Bien que je n'ai pas exactement la même version Delphi que vous (j'ai D6 et D2010 à portée de main). Pouvez-vous faire un MCVE. Alors au moins nous pouvons voir si le problème persiste dans les versions Delphi plus modernes –

+0

Dépend de votre vrai code mais ne pouvez-vous pas supprimer le 'avec '? C'est à dire. qualifier explicitement quelque chose comme nécessaire? –

+1

"Dans mon programme réel, la commande 'goto' sera utilisée pour quitter un code fortement imbriqué, où la logique de sortie en toute sécurité est tortueuse." - nettoyez la logique de sortie, utilisez 'try/finally' pour le nettoyage, et vous pouvez remplacer' goto' par 'exit'. –

Répondre

2

Je viens de découvrir que Delphi compile correctement le code. Mais l'erreur de message est toujours affichée dans la vue Structure.

Eh bien, cela change un peu les choses, et explique pourquoi je ne pouvais pas reproduire une erreur de compilation.

Les outils utilisés par l'IDE pour analyser le code ne sont pas les mêmes que les outils utilisés pour le compiler. Les outils utilisés par l'IDE sont connus pour contenir de nombreux défauts. Clairement, vous en avez trouvé un. Il n'y a pas vraiment de raison de soumettre un rapport de bogue pour Delphi 2006. Vous devriez simplement apprendre à ignorer l'erreur.