找到正确的c类型

时间:2013-07-01 15:00:44

标签: c types

我一直在使用C中的新类型。我最近花了很长时间尝试获取size_t变量来接受getline()的输出(可能是this误导})只是最终注意到ssize_t(是的,两个s)是正确的类型。是否有某个可能的变量声明的列表?

3 个答案:

答案 0 :(得分:3)

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

标准库中没有 ,但至少不是常用的。

答案 1 :(得分:2)

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

typedef int myowntype;

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

在标准库中,只有少数类型名称,例如time_tsize_t

如评论中所述,也可以使用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;

答案 2 :(得分:1)

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

我建议你从错误的方向接近这个。了解所有可能的类型对编程不是很有帮助;您需要知道的是用于特定目的的类型。

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

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

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

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