Sind sowohl "complex float" als auch "float complex" gültig C?

8

Meine Frage ist einfach das:

  

Sind sowohl "complex float" als auch "float complex" gültig C?

Beide scheinen ohne Warnungen von gcc akzeptiert zu werden.

    
eleanora 16.01.2017, 14:52
quelle

2 Antworten

6

complex ist ein Makro aus complex.h, das in den Typbezeichner _Complex expandiert. Dies verhält sich wie alle anderen Typspezifizierer, beispielsweise int, bool, double . Für alle Typenbezeichner, die zu derselben "Gruppe" gehören, können Sie sie in verschiedenen Aufträgen kombinieren. Dies wird durch C11 6.7.2, Hervorhebung meins angegeben:

  

In der Deklaration muss mindestens ein Typbezeichner angegeben werden   Spezifizierer in jeder Deklaration und in der Spezifizierer-Qualifikationsliste in   Jede Strukturdeklaration und jeder Typname. Jede Liste von Typspezifizierern   ist eine der folgenden Multimengen (durch Kommata begrenzt, wenn   es gibt mehr als ein Multiset pro Artikel); die Typspezifizierer können   in beliebiger Reihenfolge auftreten , möglicherweise vermischt mit der anderen Deklaration   Spezifizierer.

Dann folgt eine Liste gültiger Gruppen von Typspezifizierern, wo wir

finden
  
  • float _Complex
  •   
  • double _Complex
  •   

Das bedeutet, dass jede Permutation der Spezifizierer in derselben Gruppe in Ordnung ist.

Um ein anderes Beispiel zu nehmen, gibt es eine Gruppe

  
  • unsigned long long oder unsigned long long int
  •   

Was uns die folgenden möglichen Kombinationen gibt:

%Vor%

oder

%Vor%

Das alles bedeutet dasselbe.

    
Lundin 16.01.2017, 15:04
quelle
5

Ja. Im Allgemeinen spielt die Reihenfolge der "typy words" am Anfang einer Deklaration keine Rolle:

%Vor%

ist dasselbe wie

%Vor%

Referenz: C99, 6.7.2 / 2

  

[...] Die Typspezifizierer können möglicherweise in beliebiger Reihenfolge auftreten   vermischt mit den anderen Deklarationsspezifikatoren.

(Sowohl float als auch _Complex sind Typspezifikatoren.)

    
melpomene 16.01.2017 14:55
quelle

Tags und Links