J'ai trouvé les deux long int long
et je int long long
peux compiler pour un type variable. Est - 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 longs:
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;
c++
syntax
long-integer
ggrr
la source
la source
std::swap
. Cela ne compilera pas si les types ne sont pas identiques.Réponses:
Selon la norme C ++ (7.1.6.2 Spécificateurs de type simple)
Par exemple, la déclaration suivante est valide
Vous pouvez même utiliser un
constexpr
spécificateur avec unconst
qualificatif. Par exempleAu fait, nous avons oublié le spécificateur
signed
! Ajoutons-le par exemple avant le déclarateurx
En C, vous pouvez également utiliser plusieurs qualificatifs de type dans la même séquence de spécification de déclaration. Selon la norme C (6.7.3 qualificatifs de type)
Ainsi par exemple en C la déclaration suivante est également valide
Donc si vous êtes payé en fonction du nombre de symboles tapés dans le programme alors je vous conseille d'utiliser de telles déclarations. :)
la source
#define REM(...)
, puis pour un exemple d'un nombre énorme de mot,i++; REM(Here, we increment i to make sure the new value of i is one more than the old value of i. This is safe because we know the value of i is less than the maximum value of i's type.)
?const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const answer = 42;
compile très bien en C :-)Oui.
C ++ 11 §7.1.6.2 / 3
la source
Oui, mais ne le faites pas . Tout comme l'anglais et l'allemand ont des ordres de mots conventionnels pour les adjectifs et les adverbes (par exemple temps - manière - lieu), il en va de même pour C et C ++. Varier de l'ordre conventionnel ne confondra pas le compilateur, mais cela déroutera vos collègues développeurs. Je dirais que l'ordre conventionnel est à peu près le type de
static
/extern
(lien)const
/volatile
(modification)signed
/unsigned
(signature)short
/long
(longueur)bien qu'il y ait certainement une marge de manœuvre.
la source
Toutes les autres réponses ici concernaient la deuxième partie de votre question. Pour la première partie: «long long» = «long long int»? , la réponse est oui .
C ++ 11 7.1.6.2 Spécificateurs de types simples (tableau 10)
Pour la deuxième partie de votre question: «long int long» = «int long long»? , la réponse est encore 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, tous les éléments suivants
sont valides et équivalentes.
la source