2015-08-28 31 views
5

Se una sorgente C ha un'etichetta inutilizzata, l'unica ragione per cui posso pensare che sia (attualmente) utile è se qualcuno lo utilizza come "segnalibro" per trovare facilmente una sezione di codice. Escludendo tali motivi, esistono motivi tecnici per cui le etichette non utilizzate potrebbero non voler essere rimosse? In altre parole, è possibile rompere un'unità di compilazione rimuovendole in modo tale che le unità di compilazione esterne possano in qualche modo usarlo?In C, le etichette non utilizzate possono sempre essere rimosse e mantenere attivo un programma?

MODIFICA: il codice specifico che sto modificando è pre-C89, quindi il comportamento C storico può fare la differenza.

+0

etichetta come nelle istruzioni etichettate quelle utilizzate con goto? –

+0

@rahul tyagi Sì. –

+0

Se sono veramente inutilizzati, dovrebbe essere sicuro rimuoverli. Perché renda qualcosa ci dovrebbe essere qualcosa di misterioso e sbagliato riguardo al codice o al compilatore, penso. – Dmitri

risposta

5

è sicuramente sicuro per C99, C11 standard in cui si afferma chiaramente che:

Un nome etichetta è l'unico tipo di identificatore che ha funzione ambito. Può essere utilizzato (in un'istruzione goto) in qualsiasi punto della funzione in cui appare ed è dichiarato implicitamente dall'aspetto sintattico (seguito da: e un'istruzione).

Quindi se l'etichetta non è utilizzata all'interno della funzione, è possibile rimuoverla.

PS In C89 norma abbiamo:

Un nome etichetta è l'unico tipo di identificatore che ha funzione portata. Può essere utilizzato (in un'istruzione goto) in qualsiasi punto della funzione in cui appare ed è dichiarato implicitamente dall'aspetto sintattico (seguito da: e un'istruzione). I nomi delle etichette devono essere univoci entro una funzione.

Ancora una volta le etichette sono confinati in ambito funzione, ma anche nel vecchio libro gloriosa K & R linguaggio C, pagina 58 §3.8 Goto ed etichette, dice:

A etichetta ha la stessa forma di un nome di variabile ed è seguita da un due punti . Può essere allegato a qualsiasi istruzione nella stessa funzione del goto . L'ambito di un'etichetta è l'intera funzione.

Quindi è possibile rimuoverli da ovunque in modo sicuro abbastanza.

+0

Il codice base che sto aggiornando è pre-C89. Lo menzionerò nella domanda. La tua risposta è tuttavia molto utile e potrebbe eventualmente ottenere il segno di spunta verde. –

+0

@ Dr.PersonPersonII Prego. Si prega di consultare il mio aggiornamento. –

+0

Sei fantastico. L'acquisto di una copia del libro K & R è stato nella mia lista di cose da molti anni. Ho davvero bisogno di farlo. Grazie ancora. –