Die Bestellung von Speicherklassen-Spezifizierer (extern
, static
, register
, auto
, typedef
) bezüglich Spezifizierer Typ (int
, double
, char
, etc.) keine Rolle spielt. Beide sind gültig und deklarieren das gleiche Objekt.
Es ist jedoch eine gute Praxis, sich an eine bestimmte Reihenfolge zu halten. Die Spezifizierer-Qualifizierer Liste, die die declarator (i
in Ihrem Fall) vorausgeht besteht aus verschiedenen Gruppen von Schlüsselwort, die in der folgenden Reihenfolge am besten verwendet werden:
- Lagerklasse Bezeich, falls vorhanden:
static
, extern
, auto
, register
typedef
, _Thread_local
(C11);
- Art Qualifier, falls vorhanden:
const
, volatile
, restrict
;
- Typmodifikatoren, falls vorhanden:
signed
, unsigned
, short
, long
;
- Der Typspezifizierer:
static const volatile unsigned long int a;
statt (ein extremes Beispiel): int
, char
, double
, float
usw.
dieser Regel verfolgt lesbarer Erklärungen wie diese führen würde:
unsigned volatile int static const long a;
Nur eine kurze Notiz hier. Niemand schreibt "auto" oder "register" in C-Code, der in den letzten 20 Jahren geschrieben wurde. Vor allem "auto", da es von C++ uminterpretiert wurde, um etwas anderes zu bedeuten. – Art
@Art: Sie wünschen ... Die 15 Jahre alte Codebase, auf der ich jeden Tag arbeite, ist gespickt mit 'Register' Deklarationen (typischerweise an fragwürdigen Stellen).(Obwohl ich "auto" zustimme, habe ich es nie in echtem Code gesehen, auch nicht schlecht) –
@MatteoItalia Ich hätte etwas sagen sollen "gelernt in den letzten 20 Jahren zu programmieren", aber das wäre auch nicht wahr . Ich habe frisch gebildete Menschen gesehen, die Steinzeitpraktiken befolgt haben, weil sie von jemandem gelernt haben, der in den 80er Jahren "alles, was es zu wissen gibt", gelernt hat. – Art