Ist inline asm Teil des ANSI C-Standards?

7

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?

    
Sloan Fitzgerald 13.12.2012, 23:39
quelle

3 Antworten

15

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.

    
Daniel Fischer 13.12.2012, 23:42
quelle
4

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).

    
Jerry Coffin 14.12.2012 00:01
quelle
2

No - inline asm ist eine gebräuchliche Erweiterung, aber nicht standardisiert (und wird oft von verschiedenen Anbietern unterschiedlich implementiert).

    
Michael Burr 13.12.2012 23:41
quelle

Tags und Links