2013-08-08 14 views
5

Sto lavorando su qualche vecchio codice qbasic. È un casino con tutte le dichiarazioni di Goto. Ho corretto che la riga seguente tornerà sempre?Quick Line Colon Line Separator

IF FLAG = 0 THEN TARGET = X: GOSUB 55000: TEMP = XI - TEMP2: RETURN 

Quindi, se ho capito bene i due punti separa le dichiarazioni sulla stessa linea. Il valore if si riferisce solo a TARGET = X. GOSUB, TEMP = e RETURN verranno sempre eseguiti. Corretta?

Parte della mia confusione è perché la linea successiva legge

IF FLAG = 1 THEN STEP = X: GOSUB 115000 

E dal momento che l'etichetta per la seconda istruzione non viene mai utilizzato in un GOTO non riesco a vedere che sarebbe mai eseguito.

+1

È "Nibbles" o "Gorilla"? –

+0

@JoeEnos Né. È un vecchio codice IEEE. –

+0

Almeno non è PL/I: ['if then then then = else; else else = if; '] (http://wiki.tcl.tk/14057?redir=13395). Le lingue moderne hanno parole chiave riservate per un motivo ... ;-) –

risposta

5

Sì, credo che la vostra valutazione sia corretta. Il colon è un separatore di istruzioni che consente di avere più istruzioni sulla stessa riga. Assumendo la subroutine a 55000 ritorni, anche questa riga dovrebbe tornare.

Mi sono sbagliato. L'esecuzione di questo programma:

if 1=2 then print "Never printed" : print "how about this?" 
print "End of program" 

su qb64.net stampa solo End of program. Presumo che i suoi dettagli grammaticali siano gli stessi di Qbasic, sebbene si tratti di uno sforzo di ingegneria inversa.

Per inciso, questo codice è scritto in uno stile pre-QBasic (ad esempio utilizzando GOSUB e numeri di riga). C'è uno script che spesso viene fornito con QBasic (remline.bas, credo che sia stato chiamato) che dovrebbe aiutare a tradurre questo tipo di programmi in uno stile più nuovo. Non l'ho mai usato da solo, però.

+0

Grazie. Devo dire che l'unica cosa peggiore del codice spaghetti è il codice spaghetti scritto male. –

+0

Ho trovato questo link che sembra dire che la mia ipotesi è sbagliata. http://stackoverflow.com/questions/367325/vb-net-if-statement-and-the-colon –

+0

Beh, l'ho appena provato su [qb64.net] (http://qb64.net), che a quanto pare ha un'interfaccia online per la loro implementazione ora, e si scopre che ho sbagliato. Grazie per avermelo fatto conoscere così posso modificare la mia risposta :). – Troy