2015-08-28 1 views
5

Wenn eine C-Quelle ein unbenutztes Etikett hat, kann der einzige Grund, warum ich es (aktuell) für nützlich halten könnte, darin bestehen, dass jemand es als "Lesezeichen" verwendet, um einen Codeabschnitt zu finden. Gibt es aus technischen Gründen einen Grund, warum nicht verwendete Etiketten nicht entfernt werden sollten? Mit anderen Worten, ist es möglich, eine Kompilierungseinheit zu unterbrechen, indem sie so entfernt wird, dass externe Kompilierungseinheiten sie irgendwie verwenden können?In C, können unbenutzte Etiketten immer entfernt werden und ein Programm funktionieren?

BEARBEITEN: Der spezifische Code, den ich modifiziere, ist vor C89, also kann historisches C-Verhalten einen Unterschied machen.

+0

Label wie in beschrifteten Aussagen die mit goto verwendet werden? –

+0

@rahul tyagi Ja. –

+0

Wenn sie wirklich unbenutzt sind, sollte es sicher sein, sie zu entfernen. Damit es etwas kaputt macht, müsste es etwas Rätselhaftes und Falsches am Code oder Compiler geben, denke ich. – Dmitri

Antwort

5

Es ist sicher sicher für C99, C11 Standards, wo klar, dass heißt:

Ein Markenname die einzige Art von Kennung, die Funktionsumfang hat. Es kann (in einer goto-Anweisung) überall in der Funktion verwendet werden, in der es erscheint, und wird implizit durch sein syntaktisches Erscheinungsbild erklärt (gefolgt von a: und einer Anweisung).

Wenn das Etikett in der Funktion nicht verwendet wird, können Sie es entfernen.

PS In C89 Standard, den wir haben:

Ein Markenname die einzige Art von Kennung, die Funktionsumfang hat. Es kann (in einer goto-Anweisung) überall in der Funktion verwendet werden, in der es erscheint, und wird implizit durch sein syntaktisches Erscheinungsbild erklärt (gefolgt von a: und einer Anweisung). Etikettenbezeichnungen müssen innerhalb eine Funktion eindeutig sein.

Wieder Etiketten werden in Funktionsumfang beschränkt, sondern auch in der alten glorreichen Buch K & R C-Sprache, Seite 58 §3.8 Goto und Etiketten, sagt:

A label hat die gleiche Form wie ein Variablenname, gefolgt von einem Doppelpunkt . Es kann an jede Anweisung in der gleichen Funktion wie die goto angefügt werden. Der Umfang eines Etiketts ist die gesamte Funktion.

So können Sie sie von überall sicher entfernen.

+0

Die Codebasis, die ich aktualisiere, ist vor C89. Ich werde das in der Frage erwähnen. Ihre Antwort ist jedoch sehr hilfreich und kann eventuell das grüne Häkchen bekommen. –

+0

@ Dr.PersonPersonII Gern geschehen. Bitte sehen Sie mein Update. –

+0

Du bist großartig. Der Kauf einer Kopie des K & R-Buches steht seit vielen Jahren auf meiner ToDo-Liste. Ich muss das wirklich tun. Danke noch einmal. –

Verwandte Themen