Wo ist ptrdiff_t
in C definiert?
Wo ist ptrdiff_t in C definiert?
Matt Tischler
Es ist definiert in stddef.h
.
Dieser Header definiert die ganzzahligen Typen size_t
, ptrdiff_t
und wchar_t
das funktionale Makro offsetof
und das konstante Makro NULL
.
-
Seltsamerweise befindet es sich in
linux/stddef.h
(aber beinhaltet gut mit#include <stddef.h>
. Es enthält nur Definitionen fürNULL
(aber einschließlich gibt es mirptrdiff_t
). Hier gibt es einige Header-Tricks, die mich daran gehindert haben, es überhaupt zu gruppieren. Kannst du aufklären?– Matt Tischler
30. August 2010 um 4:02 Uhr
-
Und nur davon
ptrdiff_t
undoffsetof
an keiner anderen Stelle definiert sind; Die anderen drei werden auch durch eine Reihe anderer Header definiert.– Jonathan Leffler
30. August 2010 um 4:04 Uhr
-
@Matt: Es gibt keine Definition von
ptrdiff_t
überhaupt? Genau genommen muss ein Compiler nichts im Header implementieren. Es könnte auskommen, indem man einfach notiert, dass ifstddef.h
enthalten ist, wird es intern definiertptrdiff_t
usw. Das könnte es sein, aber ich habe Ihre Version des Headers nicht zur Verfügung, um nachzusehen.– GManNickG
30. August 2010 um 4:06 Uhr
-
Die wirkliche
stddef.h
versteckt sich darunter/usr/lib/gcc/TARGET/VERSION/include
zusammen mit einer Reihe anderer Header, die zu GCC gehören (und möglicherweise GCC-versionsspezifisch sind) und nicht zu den C-Bibliotheken.linux/stddef.h
wird nur für Kernel-Code verwendet (und ich verstehe ehrlich gesagt nicht, warum sie sich die Mühe machen, ihre eigene Kopie zu haben). Möglicherweise finden Sie die-H
Wechseln Sie zu gcc, um diese Art von Frage zu untersuchen.– zol
30. August 2010 um 4:08 Uhr
-
@GoodPerson Das ist kein GNU-libc-basiertes Betriebssystem, das Sie da haben. Viele andere C-Bibliotheken bieten ihre eigenen an
stddef.h
, aber glibc überlässt es dem Compiler. Auf jeden Fall, wenn Sie GCC haben, was beachtenecho '#include <stddef.h>' | gcc -E -H -xc - > /dev/null
Drucke.– zol
6. März 2013 um 23:15 Uhr
Es ist durch den POSIX-Standard definiert: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stddef.h.html Wo genau der Typ ist, kann implementierungsspezifisch sein, aber die Schnittstelle ist stddef.h
-
ptrdiff_t
ist darin definiert<stddef.h>
in voller Übereinstimmung mit dem C-Sprachstandard. POSIX ist in diesem Fall völlig nebensächlich.– AnT steht zu Russland
27. September 2018 um 20:46 Uhr