ptrdiff_t 在 C 中定义在哪里?

Posted

技术标签:

【中文标题】ptrdiff_t 在 C 中定义在哪里?【英文标题】:Where is ptrdiff_t defined in C? 【发布时间】:2011-04-05 14:14:57 【问题描述】:

ptrdiff_t 在 C 中定义在哪里?

【问题讨论】:

【参考方案1】:

stddef.h中定义。


该标头定义了整数类型size_tptrdiff_twchar_t、函数宏offsetof 和常量宏NULL

【讨论】:

奇怪的是,它位于linux/stddef.h(但包括#include <stddef.h> 的罚款。它只包含NULL 的定义(但包括它给了我ptrdiff_t)。有一些标题诡计正在发生这里首先阻止了我对它的理解。你能开导吗? 而且,其中只有ptrdiff_toffsetof 没有在任何其他地方定义;其他三个也由许多其他标题定义。 @Matt:根本没有ptrdiff_t 的定义?严格来说,编译器不必在头文件中实现任何东西。只需注意如果包含stddef.h,它就会在内部定义ptrdiff_t 等等。可能是这样,不过,我没有您的标头版本可供查看。 真正的stddef.h 隐藏在/usr/lib/gcc/TARGET/VERSION/include 下,还有一些属于GCC(并且可能是特定于GCC 版本)而不是C 库的头文件。 linux/stddef.h 仅用于内核代码(老实说,我不明白他们为什么要费心拥有自己的副本)。您可能会发现 -H 切换到 gcc 对于调查此类问题很有用。 @GoodPerson 这不是您所拥有的基于 GNU-libc 的操作系统。许多其他 C 库确实提供了自己的 stddef.h,但 glibc 将其留给编译器。无论如何,如果您有 GCC,请观察 echo '#include <stddef.h>' | gcc -E -H -xc - > /dev/null 打印的内容。【参考方案2】:

它由 POSIX 标准定义:http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stddef.h.html 确切的类型可能是特定于实现的,但接口是 stddef.h

【讨论】:

ptrdiff_t<stddef.h>中定义,完全符合C语言标准。在这种情况下,POSIX 完全无关紧要。

以上是关于ptrdiff_t 在 C 中定义在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

“错误:'ptrdiff_t' 没有命名类型”在 Ubuntu 12.04 中安装 Berkley DB XML 2.5.16

c/c++类型转换相关总结

size_t, ptrdiff_t, size_type, difference_type

C指针(2):指针的长度和类型

C ++ 11标准中“顶级cv-qualifiers”的定义在哪里?

3.5数组