最近,我花了很长时间试图让一个size_t
变量接受getline()
的输出(可能是被this误导了),但最终注意到ssize_t
(是的,两个s)是正确的类型。有没有所有可能的变量声明的列表?
发布于 2013-07-01 23:17:09
在C中没有所有可能类型的列表,因为在后置上有无限多的类型(或者接近到无限多)。
我建议你从错误的方向来处理这个问题。知道所有可能的类型对编程没有多大帮助;您需要知道的是将哪种类型用于给定的目的。
对于您想要调用的任何函数(包括getline
),您需要做的第一件事是阅读该函数的文档。
语言定义的类型相对较少。有一些内置的类型,比如char
、int
、double
等等,还有许多由标准库定义的类型。请参考任何像样的C参考资料,或C标准本身。最新的草案是N1570。(这是2011 ISO C标准的草案,尚未完全实现。)
更多的类型由二级标准定义。POSIX可能是其中最值得注意的。例如,ssize_t
(与size_t
对应的带符号类型)是由POSIX定义的,而不是由ISO定义的。
请务必阅读文档,以找出给定类型所保证的特征。例如,size_t
保证是无符号整数类型,而time_t
保证是算术类型(它可以是有符号的、无符号的,甚至是浮点类型)。如果你想编写可移植的代码,不要做任何超出保证范围的假设。
发布于 2013-07-01 23:03:44
好吧,也许不是这样,但是如果您知道要调用哪个函数(getline()
in your case),那么该函数的手册页面当然会指定正确的类型。
标准库中没有那么多,至少不是常用的。
发布于 2013-07-01 23:04:09
在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;
https://stackoverflow.com/questions/17407585
复制相似问题