【问题标题】:Finding the correct c type找到正确的 c 类型
【发布时间】:2013-06-28 18:11:31
【问题描述】:

我一直在 C 中遇到新类型。最近,我花了很长时间试图让一个 size_t 变量来接受 getline() 的输出(可能被 this 误导),但最终才注意到ssize_t(是的,两个 s)是正确的类型。某处是否有所有可能的变量声明的列表?

【问题讨论】:

  • 链接的问题最初显示了getline 的声明,返回类型为size_t;我刚刚更正它以显示它返回ssize_t

标签: c types


【解决方案1】:

好吧,也许不是这样,但是如果您知道要调用哪个函数 (getline() in your case),那么该函数的手册页当然会指定正确的类型。

标准库中没有那么多,至少不是常用的。

【讨论】:

    【解决方案2】:

    在 C 中,可以使用 typedef 定义您自己的类型名称。示例:

    typedef int myowntype;
    

    为此,可能的类型名称取决于您包含的头文件。因此,您必须查阅您使用的每个库的文档。

    在标准库中只有几个类型名称,例如time_tsize_t

    如 cmets 中所述,也可以使用 struct 声明您自己的类型。然后可以为新类型定义类型名称:

    typedef struct {
        int a;
        int b;
    } my_type;
    

    定义了一个新类型struct {int a; int b;},并为此结构类型定义了一个新的类型名称my_typestruct 本身也可以定义一个类型名称,其名称中包含结构体:

    struct my_struct {
        int a;
        int b;
    }
    

    定义一个新类型和一个类型名struct my_struct,可以用来声明变量:

    struct my_struct a;
    

    【讨论】:

    • typedef 没有定义新类型;它只是为现有类型定义别名。在您的示例中,intmyowntype 不是具有相同特征的两种类型,它们是相同的类型。
    • @Keith Thompson:你是对的,但是针对类型名称的问题和 typedef 定义了一个新的类型名称。编辑使其更清晰。
    【解决方案3】:

    C 中没有所有可能的类型的列表,因为它们的数量可能无限多(或接近于无限多)。

    我建议你从错误的方向来处理这个问题。了解所有可能的类型对编程没有多大帮助;您需要知道的是用于特定目的的类型。

    对于您想要调用的任何函数(包括getline),您需要做的第一件事就是阅读该函数的文档。

    语言定义的类型相对较少。有charintdouble 等内置类型,标准库定义了许多类型。请查阅任何体面的 C 参考资料或 C 标准本身。最新的草稿是N1570。 (这是 2011 ISO C 标准的草案,尚未完全实施。)

    更多类型由二级标准定义。 POSIX 可能是其中最值得注意的。例如,ssize_t(对应于size_t 的有符号类型)是由 POSIX 定义的,而不是由 ISO C 定义的。

    请务必阅读文档以了解给定类型所保证的特性。例如,size_t 保证为无符号整数类型,time_t 保证为算术类型(它可以是有符号、无符号甚至浮点)。如果您想编写可移植的代码,请不要做出任何超出保证范围的假设。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 2019-01-28
      • 2013-10-26
      相关资源
      最近更新 更多