未知类型名称'ssize_t'

6

我目前遇到了以下错误:

未知类型名 '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。


问题已经解决。由于我使用的是CLion并在Windows 10上运行它,我所需要做的就是切换到MinGW工具链。要访问MinGW工具链--转到文件->设置->构建、执行、部署->工具链->将MinGW拖到列表顶部。这是在我的情况下有效的解决方案。 - Anthony Mifsud
3个回答

3

来自 `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>.

请逐个尝试这些方法,其中一个应该会有效。


我解决了这个问题。由于我正在使用CLion并在Windows 10上运行它,所以我所要做的就是切换到MinGW工具链。 - Anthony Mifsud

2
请注意,即使您包含了<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

0

你必须决定要使用哪个标准:C99 还是 Posix。

如果你想使用类型 ssize_t,那么你必须在你的源代码中定义(激活)该标准,请参见man feature_test_macros

但要注意,如果你激活任何启用所需 Posix 标准的标准,你就不再是纯 C99 了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接