我正在阅读Programming in C by Stephan G. Kochan
。他声称C只有五种数据类型; int
,float
,double
,char
和_Bool
。
long
怎么样?它不是内置类型吗? http://www.programiz.com/c-programming/c-data-types说long
是修改大小的限定符。如果它是限定符,那么它应该仅用作long int
,而不能用作独立的long
。
那么_Bool
呢?许多互联网教程都说C中没有布尔类型。
相关:
答案 0 :(得分:38)
他说C只有五种数据类型; int,float,double,char和_Bool。
这过于简单化了。也许是有意的,如果这本书是针对初学者的。
如果您通过C11 6.2.5,它会列出以下不同的数据类型:
字符类型(6.2.5 / 15)
char
signed char
unsigned char
标准有符号整数类型(6.2.5 / 4)
signed char
short int
int
long int
long long int
标准无符号整数类型(6.2.5 / 5)
_Bool
unsigned char
unsigned short int
unsigned int
unsigned long int
unsigned long long int
真实浮动类型(6.2.5 / 10)
float
double
long double
复杂类型(6.2.5 / 11)
float _Complex
double _Complex
long double _Complex
枚举类型(6.2.5 / 16)
enum {}
void type (6.2.5 / 19)(void type是一个不完整的类型)
void
派生类型(6.2.5 / 20)
正式的术语是类型说明符 6.7.2:
type-specifier:
void
char
short
int
long
float
double
signed
unsigned
_Bool
_Complex
atomic-type-specifier
struct-or-union-specifier
enum-specifier
typedef-name
声明中至少应给出一个类型说明符 每个声明中的说明符,以及说明符限定符列表中的说明符 每个结构声明和类型名称。每个类型说明符列表 应该是以下多个集合之一(逗号分隔,何时 每个项目有多个multiset);类型说明符可以 以任何顺序发生,可能与其他声明混合 符。
- 无效 - char
- 签名字母
- unsigned char
- short,signed short,short int或signed short int
- unsigned short或unsigned short int
- int,signed或signed int
- 无符号或无符号的int - long,signed long,long int或signed long int
- 无符号长整数或无符号长整数
- 长,签长长,长长的int,或 签署了long long int
- unsigned long long,或unsigned long long int
- 浮动
- 双
- 长双 - _Bool
- float _Complex
- double _Complex
- 长双_复杂
- 原子类型说明符
- 结构或联合说明符
- 枚举说明符
- typedef name
正如我们所看到的,long
是一个类型说明符。它不是类型限定符。
答案 1 :(得分:19)
从C11草案,第6.2.5节("类型)"第4段:
有五种标准的有符号整数类型,指定为
signed char
,short int
,int
,long int
和long long int
。
如何在程序文本中指定这些类型是另一个问题,因为语法相当宽松,所以有很多方法。例如,根据6.7.2("类型说明符"),以下是指定相同类型的所有有效方法:
long
,signed long
,long int
或signed long int
这表示 long
本身是类型long int
的有效类型说明符。这在C99中是相同的(并且,我会猜测,也是早期的标准)。所以不,它不是限定词。
此外,上述内容可以与static
,volatile
,指针星号等内容混合使用。
我建议阅读其他一些书,因为阅读使用与标准不同的术语的书籍令人困惑。在回答有关C的问题时,通常会提到该标准,因此熟悉它是一个好主意。
答案 2 :(得分:0)
在C编程语言中,数据类型是内存位置或变量的声明,用于确定可能存储的数据的特征以及允许涉及它们的处理方法(操作)。
C语言提供基本算术类型,例如整数和实数类型,以及构建数组和复合类型的语法。 C标准库中的几个头包含支持类型的定义,这些定义具有其他属性,例如提供具有精确大小的存储,与实现无关。 https://wikipedia.org/wiki/C_data_types