在C中,我们使用数据类型int
,float
,char
,long
,short
,long int
,{{1} },long long int
,double
。
为什么我们不能使用long double
和long float
?
答案 0 :(得分:4)
最初long long int
不在语言规范中(long int
是C中最大的有符号整数类型)。后来long long int
被引入。也许有一天我们也会在C语言中看到long long long int
,但那一天还未到来。
至于long float
......其中没有多大意义。下一个较大的浮点类型已经有一个名称,它被称为double
。 long float
就像long short
或long char
。
答案 1 :(得分:3)
有一次,long float
是double
的同义词,但C标准认为它是非法的。非符合模式的编译器仍有可能接受long float
。
你不能使用long long long int
,因为还没有先例实现它(128位整数?),因为它会非常笨拙。
1978年出版的第一版K& R“C编程语言”有一个“C参考手册”版本,它有long
并明确提及long float
作为可能的类型之一。但是,正文似乎没有提及long float
。
UNIX版程序员手册(第7版)的第2A卷可在Bell Labs在线获得;它于1979年1月作为一个整体出版。它有一个版本的“C参考手册”,它没有引用关键字long
,因此无法识别long float
。 (请注意,尽管第2A卷的大多数章节都是单独提供的,但本章不是,但它包含在通过主页上的链接提供的PDF和Postscript版本中。鉴于单独的章节不适用于版权原因,我不能正式排除复合卷2A PDF中的章节实际上是“C参考手册”的早期版本的可能性。 更新:我找到了我的界限,打印,UNIX程序员手册第2卷(1983年出版,ISBN 0-03-061743-X)的发布版本,实际上,该章之前是'本手册,从 C编程语言 long
列为关键字。因此,PDF中提供的版本确实来自旧版本的“C参考手册”。较旧的版本很有用,因为它证实了我的主张long
因此long float
并非总是如此C语言的一部分。)
因此,在1978 - 1979年期间,C语言有些变化。结构赋值以及将函数传递和返回结构稍后添加,但仍远在C89标准之前。
答案 2 :(得分:1)
答案很简单,你在C中没有long float
和long long long int
。语言设计师have not defined them将在C中使用。
另外,添加long等同于long int,就像short和short int一样。
在大多数32位平台上:
在大多数64位平台上:
旁注
long long 不是C89 / CC90的一部分,也不是C ++ 98或C ++ 03的一部分,但确实存在于C99(因此在C11中)和C ++ 11中(因此在C ++ 14中)。
答案 3 :(得分:1)
long float
基本上(并且曾经是double
的同义词)。将额外long
s添加到整数类型必须在某处停止,并且64位是选择的折衷(因为它通常可在大多数处理器上直接表示)。