Wo ist ptrdiff_t in C definiert?

Lesezeit: 2 Minuten

Benutzeravatar von Matt Joiner
Matt Tischler

Wo ist ptrdiff_t in C definiert?

Es ist definiert in stddef.h.


Dieser Header definiert die ganzzahligen Typen size_t, ptrdiff_tund wchar_tdas funktionale Makro offsetofund 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ür NULL (aber einschließlich gibt es mir ptrdiff_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 und offsetof 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 if stddef.h enthalten ist, wird es intern definiert ptrdiff_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 beachten echo '#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


1412510cookie-checkWo ist ptrdiff_t in C definiert?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy