Was ist der Unterschied zwischen den 2? __INT_MAX__
ist definiert, ohne eine Bibliothek hinzuzufügen, soweit ich weiß und INT_MAX
ist darin definiert limits.h
aber wenn ich die Bibliothek einschließe INT_MAX
wird erweitert zu __INT_MAX__
so oder so (oder so sagt VSCode). Warum sollte ich jemals die verwenden limits.h
eine, wenn es auf die andere erweitert wird?
Unterschied zwischen INT_MAX und __INT_MAX__ in C
Magischer Thanos
Andreas Wenzel
Sie sollten immer verwenden INT_MAX
da dies die Makrokonstante ist, die durch den ISO-C-Standard definiert ist.
Die Makrokonstante __INT_MAX__
wird nicht von ISO C spezifiziert, daher sollte es nicht verwendet werden, wenn Sie möchten, dass Ihr Code so ist tragbar. Dieses Makro ist einfach ein Implementierungsdetail des verwendeten Compilers. Andere Compiler werden dieses Makro wahrscheinlich nicht definieren und implementieren INT_MAX
auf andere Weise.
dbusch
__INT_MAX__
ist ein implementierungsdefiniertes Makro, was bedeutet, dass es möglicherweise nicht auf allen Systemen vorhanden ist. Insbesondere GCC definiert dieses Makro, MSVC jedoch nicht.
Auf der anderen Seite, INT_MAX
ist durch die C-Norm definiert und garantiert vorhanden limits.h
für jeden konformen Compiler.
Verwenden Sie also für die Portabilität INT_MAX
.
-
Clang definiert auch INT_MAXals Teil der Funktion „Funktioniert ähnlich wie GCC“,
– John Dallmann
17. Dezember 2022 um 18:01 Uhr
-
Ich denke, das ist eher “funktioniert wie ein AC-Compiler” -)
– gnasher729
18. Dezember 2022 um 1:16 Uhr
-
@gnasher729: Ich glaube, John Dallman hat geschrieben INT_MAX (mit führenden und nachgestellten Unterstrichen), aber er meinte
__INT_MAX__
(mit einschließenden Backticks).– Edgar Bonett
18. Dezember 2022 um 13:12 Uhr
-
test_with_leading_and_trailing_underscores
– Oskar Skog
18. Dezember 2022 um 16:32 Uhr
-
Ein könnte Verwenden Sie auch Backslashes:
\_\_INT_MAX\_\_
⇒ __INT_MAX__ oder sogar_\_INT_MAX_\_
⇒ __INT_MAX__. Aber ja, da wir über Code sprechen, sollten wir Codeformatierung verwenden.– Scott – Слава Україні
18. Dezember 2022 um 20:14 Uhr
Warum sollte ich jemals die limits.h verwenden, wenn sie auf die andere erweitert wird?
limits.h
ist serienmäßig und tragbar.
Jede Implementierung der C-Sprache ist frei, den Wert von Makros wie z INT_MAX
wie es für richtig hält. Das __INT_MAX__
Wert, den Sie sehen, ist ein Artefakt Ihres speziellen Compilers und vielleicht sogar der speziellen Version des Compilers, den Sie verwenden.
John Dallmann
Um die anderen Antworten zu ergänzen: Wenn Sie Code schreiben, der auf mehreren Plattformen ausgeführt wird, ist es Ja wirklich zahlt sich aus, sich an die Standards zu halten. Wenn Sie dies nicht tun, haben Sie bei einer neuen Plattform viel Arbeit zu tun, um sie anzupassen, und der beste Weg, dies zu tun, besteht normalerweise darin, sie an den Standard anzupassen. Diese Arbeit ist sehr langweilig und uninteressant und es lohnt sich, sie zu vermeiden, indem man die Dinge von Anfang an richtig macht.
Ich arbeite an einem mathematischen Modellierer, der ursprünglich in den 1980er Jahren geschrieben wurde VAX/VMSund unterstützte in seinen frühen Tagen mehrere 68000-Plattformen, darunter Apollo/Domäne. Heutzutage läuft es auf 64-Bit-Windows, Linux, macOS, Android und iOS, von denen keines vorhanden ist existierte wann es erstellt wurde.
lee joe
__INT_MAX__
ist ein vordefiniertes Makro im C-Präprozessor, das den Maximalwert eines int-Typs auf einer bestimmten Plattform angibt. Dieser Wert ist implementierungsdefiniert und kann auf verschiedenen Plattformen variieren.
INT_MAX
ist eine in der Headerdatei „limits.h“ definierte Konstante, die den Höchstwert eines int-Typs angibt. Es ist wie folgt definiert:
define INT_MAX __INT_MAX__
Die Header-Datei „limits.h“ ist Teil der C-Standardbibliothek und stellt verschiedene Konstanten bereit, die die Grenzen verschiedener Typen angeben, z. B. die Mindest- und Höchstwerte der Typen „int“, „long“ und „long long“.
Der Grund warum INT_MAX
ist definiert als __INT_MAX__
Denn __INT_MAX__
ist ein vordefiniertes Makro, das den Maximalwert eines int-Typs auf einer bestimmten Plattform angibt, und INT_MAX ist einfach ein Alias für diesen Wert.
Sie können beide verwenden __INT_MAX__
oder INT_MAX
um den maximalen Wert eines int-Typs zu erhalten, aber es wird im Allgemeinen empfohlen, ihn zu verwenden INT_MAX
da es in einer Header-Datei einer Standardbibliothek definiert ist und daher besser portierbar ist.
-
__INT_MAX__
ist nicht implementierungsdefiniert. Dieser Begriff bedeutet im Zusammenhang mit C den C-Standard erfordert eine Implementierung, um anzugeben, was die Definition ist. Die C-Norm macht keine solche Anforderung für__INT_MAX__
. Eine Implementierung kann definieren__INT_MAX__
aber der Begriff „implementierungsdefiniert“ sollte nicht verwendet werden, um dies zu beschreiben.– Eric Postpischil
18. Dezember 2022 um 16:20 Uhr
-
__INT_MAX__
ist ein reservierter Name für die interne Verwendung der Implementierung; Beachten Sie die beiden führenden Unterstriche gefolgt von einem Großbuchstaben. Was Sie beschreiben, ist nur die Implementierungswahl von GCC / glibc. (Wo sie die tatsächliche numerische Konstante in den Compiler einfügen, anstatt verschiedene Versionen von zu benötigenlimits.h
für Ziele mit 16-Bitint
oder 32 vs. 64-Bitlong
.)– Peter Cordes
19. Dezember 2022 um 19:48 Uhr
-
@EricPostpischil was ist der richtige Begriff für dieses Konzept? Ich hätte “Implementierung definiert” verwendet, um alle Funktionen zu bezeichnen, die eine bestimmte Implementierung unterstützt und dokumentiert, nicht unbedingt etwas, das vom Standard gefordert wird.
– PC Luddite
20. Dezember 2022 um 19:05 Uhr
-
@PCLuddite: Meistens würde ich einfach die spezifische Formulierung „implementierungsdefiniert“ vermeiden, da der C-Standard damit Dinge meint, die eine Implementierung definieren muss. Ich könnte sagen „GCC definiert
__INT_MAX__
der Maximalwert von an seinint
“ oder „Einige C-Implementierungen definieren__INT_MAX__
,” usw. Ich bin mir nicht sicher, ob GCC tatsächlich dokumentiert__INT_MAX__
für den normalen Programmierergebrauch. Es kann etwas sein, das für Implementierer von C-Standardbibliotheken definiert wird, um es in den Headern zu verwenden, damit sie schreiben können#define INT_MAX __INT_MAX__
um einen Header zu erstellen, der sich an verschiedene Ziele anpasst…– Eric Postpischil
20. Dezember 2022 um 19:13 Uhr
-
… Im Allgemeinen könnte ich sagen, dass eine Implementierung etwas als Erweiterung definiert oder bestimmte Dinge oder andere Formulierungen angibt, die für das jeweilige Problem geeignet sind. Vermeiden Sie einfach „implementierungsdefiniert“.
– Eric Postpischil
20. Dezember 2022 um 19:14 Uhr
Satish Chandra Gupta
In der Programmiersprache C INT_MAX
ist ein Makro, das auf den maximalen Wert erweitert wird, der in einer Variablen vom Typ int gespeichert werden kann. Dieser Wert ist implementierungsdefiniert, was bedeutet, dass er je nach verwendeter C-Implementierung variieren kann. Auf den meisten Systemen ist int ein 32-Bit-Datentyp und INT_MAX
ist definiert als 2147483647, was der maximale Wert ist, der in einer 32-Bit-Zweierkomplement-Ganzzahl gespeichert werden kann.
Auf der anderen Seite, __INT_MAX__
ist ein vordefiniertes Makro, das den maximalen Wert darstellt, der in einer Variablen vom Typ int auf dem System gespeichert werden kann, auf dem das C-Programm kompiliert wird. Mögen INT_MAX
der Wert von __INT_MAX__
ist implementierungsdefiniert und kann je nach verwendeter C-Implementierung variieren. Jedoch, __INT_MAX__
wird vom Compiler während der Kompilierung gesetzt, wohingegen INT_MAX
ist typischerweise in einer Header-Datei definiert (z. B. Grenzen.h) und zur Laufzeit in das Programm eingebunden.
Im Allgemeinen wird die Verwendung empfohlen INT_MAX
eher, als __INT_MAX__
in C-Programmen, wie INT_MAX
ist portabel und funktioniert auf jedem System, wohingegen __INT_MAX__
ist spezifisch für das System, auf dem das Programm kompiliert wird.
-
__INT_MAX__
ist nicht implementierungsdefiniert. Dieser Begriff bedeutet im Zusammenhang mit C den C-Standard erfordert eine Implementierung, um anzugeben, was die Definition ist. Die C-Norm macht keine solche Anforderung für__INT_MAX__
. Eine Implementierung kann definieren__INT_MAX__
aber der Begriff „implementierungsdefiniert“ sollte nicht verwendet werden, um dies zu beschreiben.– Eric Postpischil
18. Dezember 2022 um 16:20 Uhr
-
__INT_MAX__
ist ein reservierter Name für die interne Verwendung der Implementierung; Beachten Sie die beiden führenden Unterstriche gefolgt von einem Großbuchstaben. Was Sie beschreiben, ist nur die Implementierungswahl von GCC / glibc. (Wo sie die tatsächliche numerische Konstante in den Compiler einfügen, anstatt verschiedene Versionen von zu benötigenlimits.h
für Ziele mit 16-Bitint
oder 32 vs. 64-Bitlong
.)– Peter Cordes
19. Dezember 2022 um 19:48 Uhr
-
@EricPostpischil was ist der richtige Begriff für dieses Konzept? Ich hätte “Implementierung definiert” verwendet, um alle Funktionen zu bezeichnen, die eine bestimmte Implementierung unterstützt und dokumentiert, nicht unbedingt etwas, das vom Standard gefordert wird.
– PC Luddite
20. Dezember 2022 um 19:05 Uhr
-
@PCLuddite: Meistens würde ich einfach die spezifische Formulierung „implementierungsdefiniert“ vermeiden, da der C-Standard damit Dinge meint, die eine Implementierung definieren muss. Ich könnte sagen „GCC definiert
__INT_MAX__
der Maximalwert von an seinint
“ oder „Einige C-Implementierungen definieren__INT_MAX__
,” usw. Ich bin mir nicht sicher, ob GCC tatsächlich dokumentiert__INT_MAX__
für den normalen Programmierergebrauch. Es kann etwas sein, das für Implementierer von C-Standardbibliotheken definiert wird, um es in den Headern zu verwenden, damit sie schreiben können#define INT_MAX __INT_MAX__
um einen Header zu erstellen, der sich an verschiedene Ziele anpasst…– Eric Postpischil
20. Dezember 2022 um 19:13 Uhr
-
… Im Allgemeinen könnte ich sagen, dass eine Implementierung etwas als Erweiterung definiert oder bestimmte Dinge oder andere Formulierungen angibt, die für das jeweilige Problem geeignet sind. Vermeiden Sie einfach „implementierungsdefiniert“.
– Eric Postpischil
20. Dezember 2022 um 19:14 Uhr
Abhiranjan tiwari
INT_MAX ist ein Makro, das angibt, dass eine Integer-Variable keinen Wert jenseits dieser Grenze speichern kann.
INT_MIN gibt an, dass eine Integer-Variable keinen Wert unterhalb dieser Grenze speichern kann.
Die Werte von INT_MAX und INT_MIN können von Compiler zu Compiler variieren. Im Folgenden sind typische Werte in einem Compiler aufgeführt, in dem Ganzzahlen mit 32 Bit gespeichert werden.
Der Wert von INT_MAX ist +2147483647. Der Wert von INT_MIN ist -2147483648.
-
Okay, aber Sie müssen erklären, wie
INT_MAX
unterscheidet sich von__INT_MAX__
.– Null
22. Dezember 2022 um 20:52 Uhr
Es gibt einige gute Informationen über führende Unterstriche in dieser SO-Frage.
– AdrianHHH
17. Dezember 2022 um 12:16 Uhr
Bitte wenden Sie bestimmte Tags (z. B. welche Sprache) auf Ihre Frage an.
– MoMo
22. Dezember 2022 um 15:40 Uhr
@MoMo Ich habe das getan, seit ich es gepostet habe wdym?
– Magischer Thanos
26. Dezember 2022 um 11:22 Uhr