C中的数据类型或限定符是多长?

时间:2016-06-23 08:58:19

标签: c

我正在阅读Programming in C by Stephan G. Kochan。他声称C只有五种数据类型; intfloatdoublechar_Bool

long怎么样?它不是内置类型吗? http://www.programiz.com/c-programming/c-data-typeslong是修改大小的限定符。如果它是限定符,那么它应该仅用作long int,而不能用作独立的long

那么_Bool呢?许多互联网教程都说C中没有布尔类型。

相关:

3 个答案:

答案 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 intintlong intlong long int

如何在程序文本中指定这些类型是另一个问题,因为语法相当宽松,所以有很多方法。例如,根据6.7.2("类型说明符"),以下是指定相同类型的所有有效方法:

  

longsigned longlong intsigned long int

这表示 long本身是类型long int的有效类型说明符。这在C99中是相同的(并且,我会猜测,也是早期的标准)。所以不,它不是限定词。

此外,上述内容可以与staticvolatile,指针星号等内容混合使用。

我建议阅读其他一些书,因为阅读使用与标准不同的术语的书籍令人困惑。在回答有关C的问题时,通常会提到该标准,因此熟悉它是一个好主意。

答案 2 :(得分:0)

在C编程语言中,数据类型是内存位置或变量的声明,用于确定可能存储的数据的特征以及允许涉及它们的处理方法(操作)。

C语言提供基本算术类型,例如整数和实数类型,以及构建数组和复合类型的语法。 C标准库中的几个头包含支持类型的定义,这些定义具有其他属性,例如提供具有精确大小的存储,与实现无关。 https://wikipedia.org/wiki/C_data_types