Encontré ambos long int long
y int long long
puedo compilar 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;
c++
syntax
long-integer
ggrr
fuente
fuente
std::swap
. Esto no se compilará si los tipos no son idénticos.Respuestas:
De acuerdo con el estándar C ++ (7.1.6.2 Especificadores de tipo simple)
Entonces, por ejemplo, la siguiente declaración es válida
Incluso puede usar el
constexpr
especificador junto con elconst
calificador. Por ejemploPor cierto, nos olvidamos del especificador
signed
! Agregémoslo, por ejemplo, antes del declaradorx
En C también puede usar varios calificadores de tipo en la misma secuencia de declarador de especificador. De acuerdo con el Estándar C (6.7.3 Calificadores de tipo)
Entonces, por ejemplo, en C, la siguiente declaración también es válida
Entonces, si se le paga de acuerdo con la cantidad de símbolos escritos en el programa, le aconsejo que use tales declaraciones. :)
fuente
#define REM(...)
, y después de un ejemplo de una enorme cuenta de la palabra,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;
compila muy bien en C :-)Si.
C ++ 11 §7.1.6.2 / 3
fuente
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 es más o menos similar a
static
/extern
(enlace)const
/volatile
(modificación)signed
/unsigned
(firma)short
/long
(longitud)aunque sin duda hay margen de maniobra.
fuente
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)
Para la segunda parte de tu 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
son válidos y equivalentes
fuente