找到正确的c类型
我一直在C中遇到新的类型。最近,我花了很长时间试图获得一个size_t
变量来接受getline()
的输出(可能由此误导)只是为了最终注意到ssize_t
(是的,两个s的) )是正确的类型。 是否有某个可能的变量声明的列表?
C中没有所有可能类型的列表,因为它们可能无限多个(或者足够接近无限多个)。
我建议你从错误的方向接近这个。 了解所有可能的类型对编程不是很有帮助; 您需要知道的是用于特定目的的类型。
对于您要调用的任何函数(包括getline
),您需要做的第一件事是阅读该函数的文档。
该语言定义的类型相对较少。 有内置类型,如char
, int
, double
等,标准库定义了许多类型。 请参考任何体面的C参考或C标准本身。 最新的草案是N1570 。 (这是2011 ISO C标准的草案,尚未完全实施。)
更多类型由二级标准定义。 POSIX可能是其中最值得注意的。 例如, ssize_t
(对应于size_t
的签名类型)由POSIX定义,而不是由ISO C定义。
请务必阅读文档以了解给定类型的特性。 例如, size_t
保证是无符号整数类型,并且time_t
保证是算术类型(它可以是有符号,无符号或甚至是浮点)。 如果您想编写可移植代码,请不要做任何超出保证的假设。
好吧,也许不是这样,但是如果你知道要调用哪个函数getline()
在你的情况下是getline()
)那么该函数的手册页当然会指定正确的类型。
标准库中没有那么多,至少不是常用的。
在C中,可以使用typedef
定义自己的类型名称。 例:
typedef int myowntype;
为此,可能的类型名称取决于您包含的头文件。 因此,您必须查阅您使用的每个库的文档。
在标准库中,只有少数类型名称,例如time_t
, size_t
。
如注释中所述,也可以使用struct
声明自己的类型。 然后可以为新类型定义类型名称:
typedef struct { int a; int b; } my_type;
定义一个新类型struct {int a; int b;}
struct {int a; int b;}
并为此struct类型定义新类型名称my_type
。 struct
本身也可以定义用结构名称编写的类型名称:
struct my_struct { int a; int b; }
定义一个新类型和一个类型名称struct my_struct
,可用于声明变量:
struct my_struct a;