【问题标题】:Unknown type name 'ssize_t' [duplicate]未知类型名称'ssize_t' [重复]
【发布时间】:2021-04-27 17:55:24
【问题描述】:

我目前遇到错误

未知类型名称'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 拖到列表顶部。这是在我的案例中有效的解决方案。

标签: c


【解决方案1】:

来自`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 工具链。
【解决方案2】:

请注意,即使您包含&lt;sys/types.h&gt;,如果您使用 GCC (-std=c99) 而不是 GNU 变体 (-std=gnu99) 指定严格的 C 标准,则可能不会定义类型。事实上,您不需要在 POSIX 2008 (2018) 或之前的版本 POSIX 2004 中显式包含 &lt;sys/types.h&gt;;它实际上是自动包含在内的。

如果您添加了 &lt;sys/types.h&gt; 并且仍然发现问题,那么您需要启用 POSIX 扩展,可能使用 #define _XOPEN_SOURCE 700 - 这个数字比 #define _POSIX_C_SOURCE 200809L 更容易记住,这是一个有效的替代方案。这两个都选择 POSIX 2008;其他版本的 POSIX 还有其他值。 X/Open 和 POSIX 之间有一些细微的差别(X/Open 可能直到指定一些 POSIX 没有的东西),但它们很少而且很少相关。 #define 必须出现在包含任何系统标头之前。可以在命令行中指定为-D_XOPEN_SOURCE=700

【讨论】:

    【解决方案3】:

    您必须决定要使用哪种标准:C99 或 Posix。

    如果您想使用 ssize_t 类型,则必须在源代码中定义(激活)该标准,请参阅 man feature_test_macros

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 2014-11-19
      • 2018-10-27
      • 2016-09-16
      • 2012-04-03
      • 2017-01-09
      相关资源
      最近更新 更多