J'ai trouvé les deux long int long
et int long long
peut compiler pour un type de variable. Y a-t-il une différence entre long int long
, int long long
, long long
et long long int
?
En général, le type est-il identique s'il a le même nombre de long
?
1 long:
long l;
int long il;
long int li;
2 long:
long long ll;
int long long ill;
long int long lil;
long long int lli;
Aussi, si ci-dessus est correct, les déclarations suivantes sont-elles également identiques?
long long* llp;
int long long* illp;
long int long* lilp;
long long int* llip;
Selon la norme C++ (7.1.6.2 Spécificateurs de type simples)
3 Lorsque plusieurs spécificateurs de type simple sont autorisés, ils peuvent être librement mélangés avec d'autres spécificateurs de déclin dans n'importe quel ordre.
Ainsi, par exemple, la déclaration suivante est valide
long static long const int x = 10;
Vous pouvez même utiliser le spécificateur constexpr
avec le qualificatif const
. Par exemple
constexpr long static long const int x = 10;
Au fait, nous avons oublié le spécificateur signed
! Ajoutons-le par exemple avant le déclarateur x
constexpr long static long const int signed x = 10;
En C, vous pouvez également utiliser plusieurs qualificateurs de type dans la même séquence de spécificateurs de déclaration. Selon la norme C (qualificatifs de type 6.7.3)
5 Si le même qualificatif apparaît plusieurs fois dans la même liste de qualificateurs, soit directement, soit via une ou plusieurs typedefs, le comportement est le même que s'il n'apparaissait qu'une fois ....
Ainsi, par exemple, en C, la déclaration suivante est également valide
const long const long static const int const signed x = 10;
Donc, si vous êtes payé en fonction du nombre de symboles saisis dans le programme, je vous conseille d'utiliser de telles déclarations. :)
Le type est-il identique ...
Oui.
C++ 11 §7.1.6.2/3
” Lorsque plusieurs spécificateurs de type simple s sont autorisés, ils peuvent être librement mélangés avec d'autres décl-spécificateurs dans n'importe quel ordre.
Oui, mais s'il vous plaît ne pas. Tout comme l’anglais et l’allemand ont des ordres classiques dans Word pour les adjectifs et les adverbes (par exemple, heure - lieu - lieu), il en est de même pour C et C++. Le fait de changer d’ordre conventionnel ne déroutera pas le compilateur, mais confusera vos collègues développeurs. Je dirais que l'ordre conventionnel est à peu près le long des lignes de
static
/extern
(lien)const
/volatile
(modification)signed
/unsigned
(signature)short
/long
(longueur)bien qu'il y ait certainement une certaine marge de manœuvre.
Est-ce que "long long" = "long long int" = "long int long" = "int long long"?
Toutes les autres réponses ici ont parlé de la deuxième partie de votre question. Pour la première partie: Est-ce que “long long” = “long long int”?, la réponse est oui.
Specifier(s) Type
... ...
long long int “long long int”
long long “long long int”
long int “long int”
long “long int”
... ...
Pour la deuxième partie de votre question: Est-ce que “long int long” = “long long”?, la réponse est à nouveau oui.
Les spécificateurs de type peuvent apparaître dans n'importe quel ordre et peuvent être mélangés avec les autres spécificateurs de déclaration. Par conséquent, tout ce qui suit
long long
long long int
long int long
int long long
sont valables et équivalentes.