Ich habe beide gefunden long int long
und int long long
kann für einen Variablentyp kompilieren. Gibt es einen Unterschied zwischen long int long
, int long long
, long long
und long long int
?
Ist der Typ im Allgemeinen identisch, wenn er die gleiche Anzahl von hat long
?
1 lang:
long l;
int long il;
long int li;
2 lang:
long long ll;
int long long ill;
long int long lil;
long long int lli;
Auch wenn oben richtig ist, sind die folgenden Erklärungen auch identisch?
long long* llp;
int long long* illp;
long int long* lilp;
long long int* llip;
c++
syntax
long-integer
ggrr
quelle
quelle
std::swap
. Dies wird nicht kompiliert, wenn die Typen nicht identisch sind.Antworten:
Gemäß dem C ++ Standard (7.1.6.2 Einfache Typspezifizierer)
So ist beispielsweise die folgende Deklaration gültig
Sie können sogar den
constexpr
Bezeichner zusammen mit demconst
Qualifizierer verwenden. BeispielsweiseÜbrigens haben wir den Spezifizierer vergessen
signed
! Fügen wir es zum Beispiel vor dem Deklarator hinzux
In C können Sie auch mehrere Typqualifizierer in derselben Deklarationsspezifikatorsequenz verwenden. Gemäß C-Standard (6.7.3 Typqualifizierer)
So gilt beispielsweise in C auch die folgende Deklaration
Wenn Sie also nach der Anzahl der im Programm eingegebenen Symbole bezahlt werden, empfehle ich Ihnen, solche Erklärungen zu verwenden. :) :)
quelle
#define REM(...)
und dann als Beispiel für eine große Wortzahli++; 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;
mischen ... kompiliert gut in C :-)Ja.
C ++ 11 §7.1.6.2 / 3
quelle
Ja, aber bitte nicht . So wie Englisch und Deutsch herkömmliche Wortreihenfolgen für Adjektive und Adverbien haben (z. B. Zeit - Art - Ort), so haben auch C und C ++. Abweichungen von der herkömmlichen Reihenfolge verwirren den Compiler nicht, aber Ihre Mitentwickler. Ich würde vorschlagen, dass die konventionelle Reihenfolge in etwa der von entspricht
static
/extern
(Verknüpfung)const
/volatile
(Änderung)signed
/unsigned
(Unterschrift)short
/long
(Länge)obwohl es sicherlich etwas Spielraum gibt.
quelle
Alle anderen Antworten hier sprachen über den zweiten Teil Ihrer Frage. Für den ersten Teil: Ist "long long" = "long long int"? Antwort ist ja .
C ++ 11 7.1.6.2 Einfache Typspezifizierer (Tabelle 10)
Für den zweiten Teil Ihrer Frage: Ist "long int long" = "int long long"? Antwort ist wieder ja.
Die Typspezifizierer können in beliebiger Reihenfolge auftreten und können gemischt werden mit den anderen Deklarationsspezifizierern werden. Daher alle folgenden
sind gültig und gleichwertig.
quelle