Ist es möglich, die Größe von Datentypen (int, float, double, ...) auf einem Linux-System herauszufinden, ohne ein C-Programm zu schreiben?
Würden die Ergebnisse für C dieselben sein wie für C ++ und andere Programmiersprachen in demselben Linux-System?
Antworten:
Wenn Sie die Definition des gewünschten Datentyps kennen, können Sie
getconf
diese Werte auf den meisten Unix-Systemen ermitteln.Die Liste der Variablen wird sowohl in der Manpage
man limits.h
als auch hier definiert undman sysconf
befindet sich nicht nur auf der Festplatte. Sie können verwendet werden,locate limits.h
es zu finden, ist es oft hier:/usr/include/linux/limits.h
.quelle
getconf
am sichersten ist , diese Werte durchzusetzen , solange Sie sagen, dass ich "den" offiziellen Compiler auf der Box getroffen habe.getconf
ist nicht so sicher, es sei denn, Sie rufen den C-Compiler alsc89
oderc99
mit (fast) keiner Option auf.So'ne Art.
Zumindest mit gcc funktioniert das:
Wie auch immer, warum willst du kein C-Programm schreiben, um das zu tun? Sie könnten ein kleines C-Programm aus der Shell an Ihren Compiler senden:
Das
-x c
teilt dem Compiler mit, welche SpracheC
und welches-
Mittel von der Standardeingabe gelesen wird.Auf meinem System wird Folgendes gedruckt:
Getestet in gcc und clang.
quelle
Ja. Sie könnten scannen
/usr/include/<arch>/limits.h
Auf meinem NetBSD amd64
/usr/include/amd64/limits.h
würde zum Beispiel Folgendes angezeigt :quelle
Wenn Sie Perl installiert haben, können Sie dies von Perl -V erhalten:
quelle
Nein ... es ist möglich, Binärdateien mit unterschiedlichen Vorstellungen der Größe von Basistypen auszuführen, insbesondere auf 64-Bit-Architekturen. Neuere Linux-Kernel auf x86_64 können native 32-Bit-Binärdateien ausführen , und es gibt das x32-ABI mit 32-Bit-Typen.
Die Datentypgrößen sind teilweise das, was der Compiler verwendet. Es ist jedoch eindeutig vorteilhaft, (1) Typen zu verwenden, die von der Maschine effizient unterstützt werden, und (2) Typen konsistent aus den Bibliotheken auf niedriger Ebene über Benutzeranwendungen zu verwenden. Es ist nur ein Chaos, mit mehreren Varianten umgehen zu müssen.
quelle
Datentypgrößen sind eine Eigenschaft eines Compilers (oder ABI), nicht des Systems. Sie können mehrere Compiler mit unterschiedlichen Größen für Datentypen auf demselben System haben.
quelle
Versuchen Sie dies, um die Zeilen zu analysieren und auszugeben, die die Zeichenfolgen enthalten, die auf die Datentypen verweisen:
Dies fängt natürlich die Definitionen in sich auf,
/usr/include/limits.h
so dass Sie das Plus an mehr erhalten, manchmal mit Werten, aber meistens mit Bezug auf das, was eingestellt ist, inlimits.h
dem Sie bequem mit den Befehlengetconf -a
und nachsehenulimit -a
können.quelle