long
y long int
sont identiques. Il en est de même pour les long long
y long long int
. Dans les deux cas, le int
est facultatif.
En ce qui concerne la différence entre les deux ensembles, la norme C++ impose des fourchettes minimales pour chacun d'entre eux et stipule que long long
est à le moins aussi large que long
.
Les éléments de contrôle de la norme (C++11, mais cela existe depuis longtemps) sont, pour commencer, les suivants, 3.9.1 Fundamental types
, section 2 (une section ultérieure donne des règles similaires pour les types d'intégrales non signées) :
Il existe cinq types d'entiers signés standard : signed char, short int, int, long int et long long int. Dans cette liste, chaque type offre au moins autant d'espace de stockage que ceux qui le précèdent dans la liste.
Il y a également un tableau 9 dans 7.1.6.2 Simple type specifiers
qui montre les "correspondances" entre les spécificateurs et les types réels (en montrant que le type int
est facultatif), dont une partie est présenté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 indiquez au compilateur quel est le type, mais vous pouvez utiliser différents spécificateurs pour aboutir au même type.
D'où long
n'est pas un type ni un modificateur comme le suppose votre question, il s'agit simplement d'un spécificateur pour le long int
type. Il en va de même pour les long long
étant un spécificateur pour le long long int
type.
Bien que la norme C++ elle-même ne spécifie pas les fourchettes minimales des types intégraux, elle cite la norme C99, dans la section 1.2 Normative references
comme s'il s'agissait d'une application. Par conséquent, les fourchettes minimales définies dans C99 5.2.4.2.1 Sizes of integer types <limits.h>
sont applicables.
En termes de long double
qui est en fait une valeur à virgule flottante plutôt qu'un nombre entier. Comme pour les types intégraux, il est nécessaire d'avoir au moins autant de précision qu'une valeur en virgule flottante. double
et de fournir un sur-ensemble de valeurs sur ce type (c'est-à-dire au moins ces valeurs, pas nécessairement plus ).