Encontrei os dois long int long
e int long long
posso compilar para um tipo de variável. Existe alguma diferença entre long int long
, int long long
, long long
e long long int
?
Em geral, o tipo é idêntico se tiver o mesmo número de long
?
1 tempo:
long l;
int long il;
long int li;
2 longos:
long long ll;
int long long ill;
long int long lil;
long long int lli;
Além disso, se acima estiver correto, as seguintes declarações também são idênticas?
long long* llp;
int long long* illp;
long int long* lilp;
long long int* llip;
c++
syntax
long-integer
ggrr
fonte
fonte
std::swap
. Isso não será compilado se os tipos não forem idênticos.Respostas:
De acordo com o padrão C ++ (7.1.6.2 Especificadores de tipo simples)
Por exemplo, a seguinte declaração é válida
Você pode até usar o
constexpr
especificador junto com oconst
qualificador. Por exemploA propósito, esquecemos o especificador
signed
! Vamos adicioná-lo, por exemplo, ao declaradorx
Em C, você também pode usar vários qualificadores de tipo na mesma sequência de especificador de declaração. De acordo com o Padrão C (6.7.3 Qualificadores de tipo)
Por exemplo, em C, a seguinte declaração também é válida
Portanto, se você é pago de acordo com o número de símbolos digitados no programa, recomendamos que você use essas declarações. :)
fonte
#define REM(...)
, e depois para um exemplo de uma contagem de palavras enormei++; 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 muito bem em C :-)Sim.
C ++ 11 §7.1.6.2 / 3
fonte
Sim, mas por favor não . Assim como o inglês e o alemão têm ordens de palavras convencionais para adjetivos e advérbios (por exemplo, horário - modo - local), o mesmo acontece com C e C ++. Variando da ordem convencional não confundirá o compilador, mas confundirá seus colegas desenvolvedores. Eu sugeriria que a ordem convencional é mais ou menos ao longo das linhas de
static
/extern
(ligação)const
/volatile
(modificação)signed
/unsigned
(assinatura)short
/long
(comprimento)embora certamente haja algum espaço de manobra.
fonte
Todas as outras respostas aqui falaram sobre a segunda parte da sua pergunta. Para a primeira parte: "long long" = "long long int"? , a resposta é sim .
C ++ 11 7.1.6.2 Especificadores de tipo simples (tabela 10)
Para a segunda parte da sua pergunta: "long int long" = "int long long"? , a resposta é sim novamente.
Os especificadores de tipo podem ocorrer em qualquer ordem e podem ser misturados com os outros especificadores de declaração. Portanto, todos os seguintes
são válidos e equivalentes.
fonte