Ich dachte immer, dass es das ist, aber viele IDEs und Syntaxhervorhebungswerkzeuge heben ASM in C nicht hervor, aber sie tun immer mit C ++. Ist die Inline-Montage Teil des C-Standards (ANSII oder ISO) oder nicht?
Es ist nicht in der ISO C-Norm (n1570 Entwurf von C2011) als solche, aber in Anhang J (gemeinsame Erweiterungen) erwähnt:
J.5.10 Das asm-Schlüsselwort
1 Das Schlüsselwort asm kann verwendet werden, um die Assemblersprache direkt in die Übersetzerausgabe einzufügen (6.8). Die gebräuchlichste Implementierung erfolgt über eine Aussage des Formulars:
%Vor%
Anhang J ist informativ, nicht normativ, so dass eine Implementierung keine Inline-Assemblierung bereitstellen muss, und wenn dies der Fall ist, ist sie nicht in welcher Form vorgeschrieben. Aber es ist eine weit verbreitete Erweiterung, obwohl nicht portierbar, da Compiler es tatsächlich anders implementieren.
Im C ++ - Standard (n3376-Entwurf des C ++ 11-Standards) wird er im Hauptteil des Standards erwähnt.
7.4 Die asm-Deklaration [dcl.asm]
1 Eine asm-Deklaration hat die Form
asm-Definition:
%Vor%Die asm-Deklaration ist bedingt unterstützt; seine Bedeutung ist implementierungsdefiniert. [Anmerkung: Normalerweise Es wird verwendet, um Informationen über die Implementierung an einen Assembler zu übergeben. - Endnote]
aber auch nicht obligatorisch und mit implementierungsdefinierter Interpretation.
Entgegen der landläufigen Meinung ist asm
im C ++ - Standard , aber die Unterstützung dafür ist bedingt. §7.4 / 1:
Eine asm-Deklaration hat die Form
asm-Definition :
%Vor%Die asm-Deklaration ist bedingt unterstützt; seine Bedeutung ist Implementierung- definiert.
Das heißt, das "bedingt unterstützte" bedeutet, dass Sie sich nicht auf einen bestimmten Compiler verlassen können, der dies überhaupt unterstützt. Microsoft (für ein offensichtliches Beispiel) verwendet stattdessen das Schlüsselwort _asm
, jedoch mit einer völlig anderen Syntax (die Assemblersprache ist in geschweifte Klammern anstelle eines String-Literals eingeschlossen).
No - inline asm ist eine gebräuchliche Erweiterung, aber nicht standardisiert (und wird oft von verschiedenen Anbietern unterschiedlich implementiert).
Tags und Links c c++ inline-assembly