Znalazłem oba long int long
i int long long
mogę skompilować dla typu zmiennej. Czy jest jakaś różnica między long int long
, int long long
, long long
i long long int
?
Ogólnie rzecz biorąc, czy typ jest identyczny, jeśli ma taką samą liczbę long
?
1 długi:
long l;
int long il;
long int li;
2 długie:
long long ll;
int long long ill;
long int long lil;
long long int lli;
Jeśli powyższe jest słuszne, czy poniższe deklaracje również są identyczne?
long long* llp;
int long long* illp;
long int long* lilp;
long long int* llip;
c++
syntax
long-integer
ggrr
źródło
źródło
std::swap
. Nie zostanie to skompilowane, jeśli typy nie są identyczne.Odpowiedzi:
Zgodnie ze standardem C ++ (7.1.6.2 Proste specyfikatory typu)
Na przykład ważna jest następująca deklaracja
Możesz nawet użyć
constexpr
specyfikatora wraz zconst
kwalifikatorem. Na przykładPrzy okazji zapomnieliśmy o specyfikatorze
signed
! Dodajmy go np. Przed deklaratoremx
W języku C możesz także użyć kilku kwalifikatorów typu w tej samej sekwencji specyfikatora deklaracji. Zgodnie ze standardem C (6.7.3 Kwalifikatory typu)
Na przykład w C obowiązuje również następująca deklaracja
Jeśli więc otrzymujesz wynagrodzenie zgodnie z liczbą symboli wpisanych w programie to radzę stosować takie deklaracje. :)
źródło
#define REM(...)
, a następnie na przykład ogromnej liczby słów,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;
kompiluje się dobrze w C :-)Tak.
C ++ 11 §7.1.6.2 / 3
źródło
Tak, ale proszę nie . Podobnie jak angielski i niemiecki mają konwencjonalne szyki wyrazów dla przymiotników i przysłówków (np. Czas - sposób - miejsce), podobnie C i C ++. Odchodzenie od konwencjonalnej kolejności nie zmyli kompilatora, ale zmyli innych programistów. Sugerowałbym, że konwencjonalna kolejność jest z grubsza podobna do
static
/extern
(połączenie)const
/volatile
(modyfikacja)signed
/unsigned
(podpis)short
/long
(długość)chociaż z pewnością jest trochę miejsca na poruszenie.
źródło
Wszystkie inne odpowiedzi dotyczyły drugiej części twojego pytania. Pierwsza część: czy „long long” = „long long int”? odpowiedź brzmi: tak .
C ++ 11 7.1.6.2 Proste specyfikatory typu (tabela 10)
W drugiej części pytania: czy „long int long” = „int long long”? odpowiedź brzmi: tak.
Specyfikatory typu mogą występować w dowolnej kolejności i mogą być mieszane z innymi specyfikatorami deklaracji. Dlatego wszystkie poniższe
są ważne i równoważne.
źródło