Dies wird angegeben in die C Standard (N1570 Entwurf), Abschnitt 6.7.2.
A Typ-Spezifizierer ist eine von mehreren Schlüsselwörtern und anderen Konstrukten, einschließlich float
, long
, double
und _Complex
. Absatz 2 sagt (Hervorhebung hinzugefügt)
Mindestens ein Typspezifizierer ist in der Erklärung Bezeich in jeder Erklärung und in der Spezifizierer-Qualifizierer-Liste in jede Strukturdeklaration und der Typname angegeben werden. Jede Liste von Typspezifizierern soll eine der folgenden Multimengen sein (durch Kommata begrenzt, wenn mehr als ein Multiset pro Element vorhanden ist); Die Typspezifizierer können in beliebiger Reihenfolge auftreten, möglicherweise vermischt mit der anderen Deklaration Spezifizierer.
Und in Absatz 5:
Jede der durch Kommata getrennte Multimengen bezeichnet die gleiche Art, mit der Ausnahme, dass [irrelevant Ausnahme weggelassen].
die hier gelisteten Multimengen umfassen:
float _Complex
double _Complex
long double _Complex
Das bedeutet, dass zum Beispiel long double _Complex
und _Complex double long
beide gleichermaßen gültig sind und die gleiche Bedeutung haben.
(Der Standard verwendet den leicht obskuren Begriff „multiset“, weil die Anzahl, wie oft ein Typspezifizierer auftritt sinnvoll sein. Wenn nicht für long long
, wäre es das Wort verwendet hat „set“.)
Und die <complex.h>
Standardkopf definiert das Makro complex
, das auf das Schlüsselwort _Complex
erweitert wird.
Ich kenne keinen C-Compiler, der _Complex
unterstützt, erlaubt aber keine Typbezeichner in beliebiger Reihenfolge. Wenn Sie einen finden, reichen Sie einen Fehlerbericht ein.
Nachdem gesagt, es hat keinen Sinn willkürlich Typspezifizierer neu zu ordnen. double complex
ist die idiomatische Form (die natürlich #include <complex.h>
erfordert). Obwohl die Syntax sie nicht so behandelt, kann man sich double
als Adjektiv und complex
als Substantiv vorstellen; double complex
ist ein komplexer Typ, kein Doppel Typ.
https://stackoverflow.com/questions/6418807/how-to-work-with-complex-numbers-in-c –
Es macht wahrscheinlich keinen Unterschied, weil alle "typy Worte" am Anfang einer Deklaration sein können neu geordnet: 'static const unsigned long int 'ist das gleiche wie' int unsigned static long const ', also würde ich annehmen, dass' _Complex' (und sein Makroalias 'complex') derselben Regel folgen. – melpomene
Ich weiß nicht, warum diese vernünftige Frage abgelehnt wird. –