Warum kompiliert dieser C ++ Code bei Verwendung von clang -std = gnu ++ 11?

8

Dies wird kompiliert, wenn clang -std=gnu++11 -c test.cpp :

verwendet wird %Vor%

Aber das gibt Fehler main.cpp:3:1: error: expected statement :

%Vor%

Wenn ich mit clang -std=gnu++11 -S -emit-llvm main.cpp kompiliere und den LLVM-Code anschaue, sieht es so aus, als ob die [[...]] -Zeile keinen Effekt hat:

%Vor%

Irgendwelche Ideen warum? Fehler oder eine C ++ 11 Syntax oder GNU Extension Syntax?

Ich benutze clang von Xcode 4.4.1 (Apple kling Version 4.0 (tags / Apple / clang-421.0.60) (basierend auf LLVM 3.1svn).

    
Mattias Wadman 31.08.2012, 09:35
quelle

1 Antwort

10

Dies verwendet die Attributsyntax von C ++ 11. " random text here " wird daher als Attribut angenommen. Nach der C ++ 11-Spezifikation kann ein Attribut viele Anweisungen und Deklarationen modifizieren.

Attribute können Anweisungen sein, aber sie müssen eigentlich Anweisungen sein. Dies bedeutet, dass sie wie viele andere C ++ - Anweisungen in ; enden.

Die Menge der von einer Implementierung unterstützten Attribute ist implementationsdefiniert (und Clang unterstützt keine. Tatsächlich soll die Attributsyntax anscheinend überhaupt nicht unterstützt werden, laut der Website ). Attribute, die nicht von einer bestimmten Implementierung implementiert werden, sollten ignoriert werden, weshalb sie keine Auswirkungen haben.

    
Nicol Bolas 31.08.2012, 10:12
quelle

Tags und Links