【问题标题】:Definition of the data types in C (GCC)C(GCC)中数据类型的定义
【发布时间】:2014-02-13 16:44:00
【问题描述】:

我知道,如果我正在寻找特定函数的源代码,例如 printf,我可以在下载 glibc 并打开该文件时看到它。

但是intdouble等标准数据类型的源代码或定义在哪里...

谢谢,我很好奇!

好吧,我不是在寻找函数、变量或数据类型究竟是什么。我想要包含“int”定义的文件。是结构吗?但它可能是在 GCC 的某个地方定义的......只是找不到文件

【问题讨论】:

  • intdouble 是语言关键字。它们内置在语言中。
  • @OliCharlesworth:是的,就是这样,这也是我的回答
  • 但是我在哪里可以找到这些?应该是开源的吧?还是在编译器中定义的?
  • @int80:确实,它们将被内置到编译器中。
  • 它们只是指向内存中的一些字节

标签: c types definition


【解决方案1】:

像 int 和 double 这样的原始变量本身实际上并没有“源代码”。

标准甚至没有非常严格地定义它们的实现。程序运行的硬件直接实现了它们的功能,因此硬件定义了 int 是什么。

但是,如果您对它们的实现方式感到好奇,大多数计算机使用twos-complement 系统来处理有符号整数;并且,IEEE Floating point standard 用于实现双精度和浮点数。

但是没有,C 语言可以保证这一点。

【讨论】:

    【解决方案2】:

    只有复杂数据类型可以被定义为结构,原始数据类型只是关于如何在内存中布局位的约定。这些约定的细节在每个编译器中都有不同的定义,涉及处理在这些原始类型上定义的操作的不同机器代码实现的数十个文件。

    确实,gcc 中可能会有 数百个 文件,其中定义了 int 的部分实现:每个操作(转换为 char/uint/double/float/etc,加上、时间、减法、除法等)在数十种架构(x86、x86-64、PowerPC)中的每一种上都需要定义代码生成、优化、宽度等。

    我建议对编译器的工作原理有一个基本的了解(标准通过:标记化、解析、分析、IL 生成、优化、代码生成)我学习的课程使用了The Dragon Book,但我听说过别人说有点过时了。

    【讨论】:

    • 所以如果我很幸运,我可以在编译器源代码中找到该文件......并且“可以”将“int”更改为“foo”......?
    • 哇,编译器的前端部分我都没想过,是啊,所以我刚刚讲了后端“code-generator”,关键字“int”将也可以在标记器中的某个地方定义。
    • 所以数据类型的定义在编译器中?谢谢。就是这样;-)
    【解决方案3】:

    从计算机的角度来看,intdouble 是内存中代表数字的几个字节,而printf 是一个可以调用和执行的函数。阅读:http://en.wikipedia.org/wiki/Primitive_data_type

    【讨论】:

      【解决方案4】:

      intdoubledatatypes,而printf 是一个函数

      您无法获取data types的源代码,它们被定义为变量可以存储数据以执行特定操作的数据存储格式。

      【讨论】:

      • 所以 int 可以接受数字和字符符号等只是一个意外......?我了解到数据类型可以用结构来定义……它们必须在某个地方定义……
      猜你喜欢
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 2012-12-14
      • 2011-02-18
      • 1970-01-01
      相关资源
      最近更新 更多