ptrdiff_t
在C中的定义在哪里?
这个定义在stddef.h
中。
该头文件定义了整数类型size_t
、ptrdiff_t
和wchar_t
,功能宏offsetof
和常量宏NULL
。
ptrdiff_t
,请注意,微软再次打破了所有可能的惯例,他们的版本的stddef.h
没有定义ptrdiff_t
,自从Visual Studio 2015以来,它已成为通用CRT(Windows SDK的一部分)的一部分。stddef.h
中的所有类型定义都位于vcruntime.h
中——只有offsetof()
仍位于stddef.h
中。您应该包含stdint.h
而不是包含stddef.h
,因为后者包含vcruntime.h
。#if defined(_MSC_VER) && (_MSC_VER >= 1900) // UCRT was introduced in VS 2015
#include <stdint.h>
#else
#include <stddef.h>
#endif
ptrdiff_t
完全按照 C 语言标准在 <stddef.h>
中定义。在这种情况下,POSIX 是完全无关紧要的。 - AnT stands with Russia
ptrdiff_t
和offsetof
没有在任何其他地方定义;另外三个也由许多其他头文件定义。 - Jonathan Lefflerstddef.h
文件藏在/usr/lib/gcc/TARGET/VERSION/include
目录下,还有许多其他的头文件也属于 GCC 而不是 C 库(并且可能与 GCC 版本有关)。linux/stddef.h
只用于内核代码(我实在不明白为什么他们要有自己的副本)。你可能会发现使用-H
开关调用 gcc 命令可以帮助你调查这种问题。 - zwolstddef.h
,但glibc则交由编译器处理。无论如何,如果你有GCC,请观察echo '#include <stddef.h>' | gcc -E -H -xc - > /dev/null
打印出来的内容。 - zwol