【发布时间】:2011-04-05 14:14:57
【问题描述】:
ptrdiff_t 在 C 中定义在哪里?
【问题讨论】:
ptrdiff_t 在 C 中定义在哪里?
【问题讨论】:
在stddef.h中定义。
该标头定义了整数类型size_t、ptrdiff_t 和wchar_t、函数宏offsetof 和常量宏NULL。
【讨论】:
linux/stddef.h(但包括#include <stddef.h> 的罚款。它只包含NULL 的定义(但包括它给了我ptrdiff_t)。有一些标题诡计正在发生这里首先阻止了我对它的理解。你能开导吗?
ptrdiff_t 和offsetof 没有在任何其他地方定义;其他三个也由许多其他标题定义。
ptrdiff_t 的定义?严格来说,编译器不必在头文件中实现任何东西。只需注意如果包含stddef.h,它就会在内部定义ptrdiff_t 等等。可能是这样,不过,我没有您的标头版本可供查看。
stddef.h 隐藏在/usr/lib/gcc/TARGET/VERSION/include 下,还有一些属于GCC(并且可能是特定于GCC 版本)而不是C 库的头文件。 linux/stddef.h 仅用于内核代码(老实说,我不明白他们为什么要费心拥有自己的副本)。您可能会发现 -H 切换到 gcc 对于调查此类问题很有用。
stddef.h,但 glibc 将其留给编译器。无论如何,如果您有 GCC,请观察 echo '#include <stddef.h>' | gcc -E -H -xc - > /dev/null 打印的内容。
它由 POSIX 标准定义:http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stddef.h.html 确切的类型可能是特定于实现的,但接口是 stddef.h
【讨论】:
ptrdiff_t在<stddef.h>中定义,完全符合C语言标准。在这种情况下,POSIX 完全无关紧要。