【问题标题】:Does C have a concept of primitive types and if so what are they?C 有原始类型的概念吗?如果有,它们是什么?
【发布时间】:2023-02-04 01:57:54
【问题描述】:

例如,java 有 8 种基本类型,如Oracle 所述。

布尔型、字节型、短型、字符型、整数型、长型、浮点型、双精度型

C 似乎有很多很多类型,但如果有的话被认为是原始类型。请列出他们的答案。

我试图找到一个类似于 Oracle 但针对 C 的可靠参考,但找不到。

Wikipedia 维护着一个模糊的“主要类型”列表,但我不确定它们是否相关。

W3Fools 列出了“基本类型”,但我也不确定这是否相关。

【问题讨论】:

  • 我正要说,“C 有一个很好的、小的基本类型列表,就像 Java 一样”,但仔细想想,that Wikipedia article,尽管它很复杂,但看起来非常准确。请注意,实际上,许多类型基本上是彼此的同义词。例如,在绝大多数常规机器上,会发现类型int与类型int16_t或int32_t相同,类型unsigned int与uint16_t或uint32_t相同。
  • 您留下了不完整的类型列表。
  • 如果我们删除,我们有 - char, short, int, long, float, double - 作为主要类型,可以进一步细分为更多类型。有趣的是,Java 的 8 种类型包含所有这 6 种,但添加了...boolean and byte。
  • 我很好奇,这个名字有什么区别?为什么使用“主要”、“基本”或“原始”这个词很重要?
  • C added a boolean type in C99.。 Java's byte type 等同于 C 中的 signed char。

标签: java c primitive-types


【解决方案1】:

答案是否定的,原因有二。

  1. Java 中原始类型的概念与对象类型相反。这在不是目标语言的 C 中没有意义。
  2. C 旨在在任何体系结构上尽可能高效,从 16 位甚至 8 位微控制器到 64 位平台。出于这个原因,通常选择 int 类型作为自然的体系结构的类型,前提是它至少包含 16 位。另一方面,Jave 以最大的可移植性为目标并固定其所有类型的大小。

    因此,即使维基百科上的列表看起来很大,但它(不幸的是……)是准确的。

【讨论】:

    【解决方案2】:

    我会说C做有“原始”或“基本”类型的概念,但正如我们所见(在问题、cmets 和 linked Wikipedia article 中),这些类型的列表相当长,不像您可能的那样简洁想想,或者回到 K&R 时代。

    我自己对 C 中原始类型的定义可能并不令人满意,“任何你可以构建派生类型的东西,比如数组、指针和包含结构的东西”。

    我很确定 C 标准中的语法有基本类型和派生类型的产生式,但我手头没有副本可以检查。

    当前的 C 类型列表看起来又长又复杂,因为出于软件工程和可移植性的原因,它包含大量“别名”,每个别名最终都以依赖于实现的方式映射到其他类型。例如,int32_t 通常与 int 或 long int 相同,size_t 通常与 unsigned int 或 unsigned long int 相同。

    【讨论】:

      猜你喜欢
      • 2020-07-24
      • 2013-03-30
      • 1970-01-01
      • 2011-03-28
      • 2014-04-10
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 2022-07-27
      相关资源
      最近更新 更多