0

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

4

3 回答 3

3

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

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

于 2013-07-01T15:03:44.010 回答
2

在 C 中,可以使用typedef. 例子:

typedef int myowntype;

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

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

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

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

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

struct my_struct {
    int a;
    int b;
}

定义了一个新类型和一个struct my_struct可用于声明变量的类型名称:

struct my_struct a;
于 2013-07-01T15:04:09.207 回答
1

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

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

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

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

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

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

于 2013-07-01T15:17:09.263 回答