2017-01-08 7 views
0

Ich bin ein bisschen verwirrt und habe noch keine explizite Antwort gefunden: soll ich Etiketten nur als "label1" oder mit Unterstrich "_label1" bezeichnen? Was ist der bekannteste und beliebteste Weg? Ich habe sogar einen mit Punkt ".label1" gesehen, wenn ich mich richtig erinnere. Die gleiche Frage gilt für Funktionen: "function1" oder "_function1"?Namenskonvention für Etiketten, Funktionen

+0

Welches Betriebssystem? Welche Architektur? Welche Aufrufkonvention? All diese Fragen beeinflussen die Antwort. – fuz

+0

@fuz, Windows, Linux, x32, x86-64, Stdcall, Fastcall, Cdecl. – ako25

+0

Mögliches Duplikat von [Der führende Unterstrich, der heutzutage für Etiketten nicht empfohlen wird?] (Http://stackoverflow.com/questions/41529300/das-leading-undersunder-not-recommended-nowadays-for-labels) –

Antwort

2

Aus Sicht der Codewartung bieten führende Punkte und Unterstriche keine nützliche Information für ein Label. Wenn diese Präfixe also nicht benötigt werden (siehe unten), sollten Sie sie loswerden. Allein die Tatsache, dass Sie vielleicht denken "es sieht schick aus" ist nicht genug Grund, sie zu benutzen.

Punkte werden manchmal von Assemblern verwendet, um anzugeben, dass ein Etikett lokal ist, d. H. Nicht als Symbol in die Objektdatei exportiert werden soll. Dies kann nützlich sein, um den globalen Namensraum nicht mit Symbolen zu belasten, die Sie nicht benötigen.

Andere Assemblierer verwenden Punkte, um eine Assembler-Direktive zu bezeichnen und erlauben keine Punkte in Symbolen überhaupt.

Unterstreichungen werden normalerweise von Assemblercode verwendet, der in höhere Sprachen integriert werden muss. Einige C-Compiler weisen allen exportierten Symbolen Präfixe mit Unterstrichen zu, und Assemblerfunktionen müssen dieser Regel folgen, damit sie aus C-Code aufgerufen werden können.

Im Allgemeinen sollte Ihr Assembler (und/oder Compiler, falls Sie mit kompiliertem Code integrieren) manuell in der Lage sein, Ihnen zu sagen, welche Variationen Ihr spezifischer Assembler unterstützt oder benötigt. Und wenn das Handbuch Sie nicht explizit darüber informiert, wann und warum Sie solche Präfixe verwenden sollten, verwenden Sie sie einfach nicht - Assembler-Labels sind ein (der minimale und wichtigste) Teil der Dokumentation Ihres Codes. Verschwende das nicht für bedeutungslose Präfixe, wenn du es nicht brauchst.

+0

übrigens, was ist mit der Einrückung für den Code unter Abschnitt .data oder Abschnitt .bss oder einen anderen Abschnitt - ist es empfehlenswert, Einrückung für den Code oder Erklärungen unter oder nicht einfügen? Ich kann nicht herausfinden, was populärer ist, ich sehe beide Ansätze. – ako25

+0

@ ako25 Kann Ihnen nicht sagen, was "die empfohlene Praxis" ist - nur meine Meinung dazu: Ich habe keine Abschnitte eingezogen - Abschnitt Änderungen passieren zu selten, um volle * horizontale Einrückung * zu rechtfertigen (sobald der eingerückte Bereich ist länger als ein Bildschirmvoll, es ist sowieso nicht viel nützen). Ich versuche jedoch, dafür zu sorgen, dass eine Abschnittsanweisung * vertikal * herausragt. Das heißt, ich neige dazu, 2-3 leere Zeilen oberhalb und mindestens eine leere Zeile unterhalb dieser Zeilen einzufügen. – tofro

0

Bei Microsoft "C" -Funktionen haben die tatsächlichen Funktionsnamen einen führenden Unterstrich. Für 32-Bit-Modus Montage umfassen Sprachtyp in der .model Direktive:

 .model flat,c  ;for 32 bit mode only, no underscores needed 

Dies unterstreicht die Notwendigkeit, die Verwendung in Funktionsnamen beseitigt. Im 64-Bit-Modus scheint die .model-Direktive nicht erlaubt zu sein, scheint aber standardmäßig auf .model flach, c.

Nebenbei bemerkt, Visual Studio 2015 "printf" (und einige andere Sachen) inline ", so versucht printf aus Assembler-Code aufrufen nicht mehr funktioniert. Ich finde es am einfachsten, dem Projekt eine C-Quelldatei hinzuzufügen und printf dort zu haben. In diesem Fall kann der Assemblycode den von der C-Quelldatei erzeugten printf aufrufen.