c++ - sirve - ¿Es “long long”=“long long int”=“long int long”=“int long long”?
long long c++ (4)
¿Es “long long” = “long long int” = “long int long” = “int long long”?
Todas las demás respuestas aquí hablaron sobre la segunda parte de su pregunta. Para la primera parte: ¿"long long" = "long long int"? La respuesta es sí .
C ++ 11 7.1.6.2 Especificadores de tipo simple (tabla 10)
Specifier(s) Type
... ...
long long int “long long int”
long long “long long int”
long int “long int”
long “long int”
... ...
Para la segunda parte de su pregunta: ¿"long int long" = "int long long"? , la respuesta es sí otra vez.
Los especificadores de tipo pueden aparecer en cualquier orden y pueden mezclarse con los otros especificadores de declaración. Por lo tanto, todo lo siguiente
long long
long long int
long int long
int long long
son válidos y equivalentes
Encontré que tanto
long int long
como
int long long
pueden compilarse para un tipo variable.
¿Hay alguna diferencia entre
long int long
,
int long long
,
long long
y
long long int
?
En general, ¿es el tipo idéntico si tiene el mismo número de
long
?
1 largo:
long l;
int long il;
long int li;
2 largos:
long long ll;
int long long ill;
long int long lil;
long long int lli;
Además, si lo anterior es correcto, ¿son idénticas las siguientes declaraciones?
long long* llp;
int long long* illp;
long int long* lilp;
long long int* llip;
Es el tipo idéntico ...
Si.
C ++ 11 §7.1.6.2 / 3
" Cuando se permiten múltiples especificadores de tipo simple , se pueden mezclar libremente con otros especificadores de declinación en cualquier orden.
De acuerdo con el estándar C ++ (7.1.6.2 Especificadores de tipo simple)
3 Cuando se permiten múltiples especificadores de tipo simple, se pueden mezclar libremente con otros especificadores de declinación en cualquier orden.
Entonces, por ejemplo, la siguiente declaración es válida
long static long const int x = 10;
Incluso puede usar el especificador
constexpr
junto con el calificador
const
.
Por ejemplo
constexpr long static long const int x = 10;
Por cierto, nos olvidamos del especificador
signed
!
Agregémoslo, por ejemplo, antes del declarador
x
constexpr long static long const int signed x = 10;
En C también puede usar varios calificadores de tipo en la misma secuencia de especificador de declaración. De acuerdo con el Estándar C (6.7.3 Calificadores de tipo)
5 Si el mismo calificador aparece más de una vez en la misma lista de calificador-especificador, ya sea directamente o mediante uno o más typedefs, el comportamiento es el mismo que si apareciera solo una vez ...
Entonces, por ejemplo, en C, la siguiente declaración también es válida
const long const long static const int const signed x = 10;
Entonces, si se le paga de acuerdo con la cantidad de símbolos escritos en el programa, le aconsejo que use tales declaraciones. :)
Sí, pero por favor no . Así como el inglés y el alemán tienen órdenes de palabras convencionales para adjetivos y adverbios (por ejemplo, tiempo, forma y lugar), también lo hacen C y C ++. Variar del orden convencional no confundirá al compilador, pero sí confundirá a sus compañeros desarrolladores. Sugeriría que el orden convencional está más o menos en la línea de
-
static
/extern
(enlace) -
const
/volatile
(modificación) -
signed
/unsigned
(firma) -
short
/long
(largo) - Tipo básico (sustantivo principal)
aunque ciertamente hay algo de margen de maniobra.