我目前遇到了以下错误:
未知类型名 'ssize_t'
我查看了Where is ssize_t defined in Linux?,但错误仍然存在。
我添加了
#include <sys/types.h>
我的功能是
ssize_t ss_size(sparse_set_ptr sparse_set)
{
return false;
}
问题的原因可能是什么,是否能够修复?此外,我正在运行C可执行语言标准:C99。
我目前遇到了以下错误:
未知类型名 'ssize_t'
我查看了Where is ssize_t defined in Linux?,但错误仍然存在。
我添加了
#include <sys/types.h>
我的功能是
ssize_t ss_size(sparse_set_ptr sparse_set)
{
return false;
}
问题的原因可能是什么,是否能够修复?此外,我正在运行C可执行语言标准:C99。
来自 `man ssize_t:
ssize_t
Include: <sys/types.h>. Alternatively, <aio.h>, <monetary.h>,
<mqueue.h>, <stdio.h>, <sys/msg.h>, <sys/socket.h>, <sys/uio.h>,
or <unistd.h>.
请逐个尝试这些方法,其中一个应该会有效。
<sys/types.h>
,如果您使用GCC指定严格的C标准(-std=c99
)而不是GNU变体(-std=gnu99
),则该类型可能未定义。实际上,在POSIX 2008(2018)或之前版本的POSIX 2004中,您不需要显式包含<sys/types.h>
;它将自动包含。<sys/types.h>
仍然看到问题,则需要启用POSIX扩展,可能需要使用#define _XOPEN_SOURCE 700
- 这个数字比#define _POSIX_C_SOURCE 200809L
更容易记住,后者也是一个有效的替代方案。这两个选择POSIX 2008;对于其他版本的POSIX还有其他值。X / Open和POSIX之间有一些微妙的差异(X / Open可能仍然指定一些POSIX不支持的内容),但它们是最小的并且很少相关。 #define
必须出现在任何系统头文件之前。它可以在命令行上指定为-D_XOPEN_SOURCE = 700
。你必须决定要使用哪个标准:C99 还是 Posix。
如果你想使用类型 ssize_t
,那么你必须在你的源代码中定义(激活)该标准,请参见man feature_test_macros。
但要注意,如果你激活任何启用所需 Posix 标准的标准,你就不再是纯 C99 了。