Zusammengesetzte Literale in MSVC

8

In GCC kann ich das tun:

%Vor%

wo:

%Vor%

MSVC gibt den folgenden Fehler für diese Arten von Umsetzungen:

%Vor%

Wie kann ich das in MSVC machen? Beachten Sie außerdem, dass der Code von C99 konvertiert wurde, wo ich dafür vorgesehene Initialisierer verwendet habe und ihn dann ähnlich umgesetzt habe. Jede Klarheit darüber, wie diese verschiedenen Merkmale zwischen C99 und MSVC / GCC-Implementierungen von C ++ in Beziehung stehen, wird geschätzt.

    
Matt Joiner 06.10.2010, 06:24
quelle

3 Antworten

12

Das Konstrukt (Type){initialisers} ist keine Cast-Operation, sondern das syntaktische Konstrukt eines zusammengesetzten Literals . Dies ist ein C99-Konstrukt, das GCC auch in seinem C ++ - Compiler als Erweiterung unterstützt. Soweit ich feststellen kann, werden zusammengesetzte Literale nicht von MSVC im C- oder C ++ - Modus unterstützt.

Die Alternativen für dieses Konstrukt sind

  • Explizites Deklarieren und Initialisieren eines temporären Objekts des gewünschten Strukturtyps und Verwendung dieses anstelle des zusammengesetzten Literals in der Zuweisung
  • Anstatt eine einzelne Zuweisung mit dem zusammengesetzten Literal durchzuführen, verwenden Sie eine separate Zuweisung für jedes einzelne Mitglied.
Bart van Ingen Schenau 06.10.2010, 07:04
quelle
4

MSVC ist nicht konform mit C99 und entspricht nur in geringem Umfang den früheren Versionen des C-Standards. Ich weiß nicht, wie man syntaktisch mit MSVC machen kann, aber der gleiche Effekt kann durch Verwendung von static const structs anstelle von anonymen zusammengesetzten Literalkonstanten und lokalen struct Variablen erreicht werden, die mit initialisiert werden die richtigen Werte anstelle von anonymen zusammengesetzten Literalen, die nicht konstant sind.

Die Idee hinter diesem Ansatz besteht darin, dass ein zusammengesetztes C99-Literal (mindestens nahezu) äquivalent zu einer lokalen Variablen desselben Typs im selben Bereich ist, die mit dem Inhalt der geschweiften Klammern initialisiert wurde. Die Verwendung von static const structs in dem Fall, in dem die Daten konstant sind, ist nur eine Optimierung (es wird wahrscheinlich einen kleineren / schnelleren Code erzeugen als der C99-Verbindungsliteralansatz).

    
R.. 06.10.2010 06:31
quelle
1

MSVC ist eine Mischung aus Standards und ist mit den meisten von ihnen nicht vollständig kompatibel, daher müssen Sie wahrscheinlich einen Standardinitialisierer / Konstruktor verwenden, so (C ++ way):

%Vor%     
Necrolis 06.10.2010 06:35
quelle

Tags und Links