wo ist der unterschied?!?!?!
-
Microsoft DirectX 9.0
D3DMATRIX Structure
--------------------------------------------------------------------------------
Describes a matrix.
Syntax
typedef struct _D3DMATRIX {
union {
struct {
float _11, _12, _13, _14;
float _21, _22, _23, _24;
float _31, _32, _33, _34;
float _41, _42, _43, _44;};
float m[4][4];
};
} D3DMATRIX;
Members_ij
An array of floats that represent a 4x4 matrix, where i is the row number and j is the column number. For example, _34 means the same as [a34].
RemarksIn Microsoft
Direct3D
, the _34 element of a projection matrix cannot be a negative number. If your application needs to use a negative value in this location, it should scale the entire projection matrix by –1 instead.
Structure Information
Header d3d9types.h
Minimum operating systems Windows 98See Also
IDirect3DDevice9::GetTransform, IDirect3DDevice9::MultiplyTransform, IDirect3DDevice9::SetTransform
--------------------------------------------------------------------------------
2002 Microsoft Corporation. All rights reserved.
-
also...?
-
ich würde sagen wenn MS das so gecodet hat muss es ja legal sein! oder?
-
sieht sehr low level aus- und nicht alles, was ms macht muss perfekt sein
-
Ms baut den Compiler, also erlauben die sich immer solch einen Mist.
-
Umm... bitte.
Unnamed unions / structs sind keine Erfindunbg von Microsoft.
@***: dein originaler code unterschlägt einen wichtigen Aspekt:
[cpp]
typedef struct _D3DMATRIX
{
union {
struct { // a)
float _11, _12, _13, _14;
float _21, _22, _23, _24;
float _31, _32, _33, _34;
float _41, _42, _43, _44;};
float m[4][4];
};
} D3DMATRIX;
[/cpp]Das struct von a) liegt an der selben Stelle im Speicher wie m.
Das einzige "nonstandard" hier ist, daß sich MS auf ein Alignment verläßt, was zwar nicht vom Standard garantiert ist, aber wohl auf jedem "sinnvollen" Compiler laufen wird.
-
peterchen schrieb:
Unnamed unions / structs sind keine Erfindunbg von Microsoft.
[..]
Das einzige "nonstandard" hier ist, daß sich MS auf ein Alignment verläßt, was zwar nicht vom Standard garantiert ist, aber wohl auf jedem "sinnvollen" Compiler laufen wird.Es geht um den nicht erlaubten Bezeichner _D3DMATRIX
Und dieser Bezeichner ist Non-Standard
-
Zu dem Thema hab ich vor ein paar Tagen ein richtig schönes Beispiel gesehen: So wie mache ein C oder ein T vor Klassenbezeichner setzen hat der einen Unterstrich davor gesetzt.
-
Namen mit Underscore sind für den Compilerhersteller reseviert, was es in diesem Fall legal macht (wenn auch nicht unbedingt im "Sinne" des Standards).
Die erste Variante funktioniert auch unter einem C-Compiler.
-
*** schrieb:
ich würde sagen wenn MS das so gecodet hat muss es ja legal sein! oder?
Nö. Und dieser Code ist definitiv kein legales C++. Auch wenn wir mal diese komischen Unterstrich-Bezeichner ignorieren.
1. Das ist erstmal eine Deklaration:
struct { float _11, _12, _13, _14; float _21, _22, _23, _24; float _31, _32, _33, _34; float _41, _42, _43, _44; };
Dummerweise wird hier aber eder ein Typ noch ein Objekt deklariert. Eine Deklaration muss aber immer einen Namen (wieder)einführen -> Fehler (es sei denn es handelt sich um eine "anonymous union").
Desweiteren darf eine "anonymous union" laut 9.5/2 keine Deklarationen von nested-Typen enthalten.
-
peterchen schrieb:
Umm... bitte.
Unnamed unions / structs sind keine Erfindunbg von Microsoft.
Die meinte ich auch nicht mit "Mist". Schau mal genauer hin.
-
HumeSikkins schrieb:
Dummerweise wird hier aber weder ein Typ noch ein Objekt deklariert. Eine Deklaration muss aber immer einen Namen (wieder)einführen -> Fehler (es sei denn es handelt sich um eine "anonymous union").
genau das meinte ich
danke, dass du mir das nachschlagen erspart hast