long
et long int
sont identiques. Il en va de même long long
pour long long int
. Dans les deux cas, l' int
option est facultative.
Quant à la différence entre les deux ensembles, la norme C ++ impose des plages minimales pour chacun, et c'est long long
au moins aussi large que long
.
Les parties contrôlantes de la norme (C ++ 11, mais cela existe depuis longtemps) sont, d'une part 3.9.1 Fundamental types
, la section 2 (une section ultérieure donne des règles similaires pour les types intégraux non signés):
Il existe cinq types d'entiers signés standard: char signé, int court, int, long int et long long int. Dans cette liste, chaque type fournit au moins autant de stockage que ceux qui le précèdent dans la liste.
Il y a aussi un tableau 9 dans 7.1.6.2 Simple type specifiers
, qui montre les "mappages" des spécificateurs aux types réels (montrant que le int
est facultatif), dont une section est montrée ci-dessous:
Specifier(s) Type
------------- -------------
long long int long long int
long long long long int
long int long int
long long int
Notez la distinction entre le spécificateur et le type. Le spécificateur est la façon dont vous dites au compilateur quel est le type, mais vous pouvez utiliser différents spécificateurs pour aboutir au même type.
Par conséquent, long
en soi, ce n'est ni un type ni un modificateur comme le pose votre question, c'est simplement un spécificateur pour le long int
type. Idem pour long long
être un spécificateur pour le long long int
type.
Bien que la norme C ++ elle-même ne spécifie pas les plages minimales de types intégraux, elle cite C99, in 1.2 Normative references
, comme s'appliquant. Par conséquent, les plages minimales définies dans C99 5.2.4.2.1 Sizes of integer types <limits.h>
sont applicables.
En termes de long double
, c'est en fait une valeur à virgule flottante plutôt qu'un entier. Comme pour les types intégraux, il est nécessaire d'avoir au moins autant de précision que a double
et de fournir un surensemble de valeurs sur ce type (c'est- à- dire au moins ces valeurs, pas nécessairement plus de valeurs).