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_t
、ptrdiff_t
和wchar_t
、函数宏offsetof
和常量宏NULL
。
【讨论】:
奇怪的是,它位于linux/stddef.h
(但包括#include <stddef.h>
的罚款。它只包含NULL
的定义(但包括它给了我ptrdiff_t
)。有一些标题诡计正在发生这里首先阻止了我对它的理解。你能开导吗?
而且,其中只有ptrdiff_t
和offsetof
没有在任何其他地方定义;其他三个也由许多其他标题定义。
@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
size_t, ptrdiff_t, size_type, difference_type