Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C(GCC)中数据类型的定义_C_Types_Definition - Fatal编程技术网

C(GCC)中数据类型的定义

C(GCC)中数据类型的定义,c,types,definition,C,Types,Definition,我知道,如果我正在寻找某个特定函数(如printf)的源代码,我可以在下载glibc并打开该文件时看到它 但是像int或double等标准数据类型的源代码或定义在哪里 谢谢,我很好奇 好的,我不是在寻找函数、变量或数据类型实际上是什么。我想要那个包含“int”定义的文件。它是一个结构吗?但它可能在GCC的某个地方定义。。。只是找不到文件int和double是数据类型,而printf是一个函数 您无法获取数据类型的源代码,它们被定义为数据存储格式,变量可以存储数据以执行特定操作。从计算机的角度来看

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

但是像
int
double
等标准数据类型的源代码或定义在哪里

谢谢,我很好奇


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

int
double
数据类型
,而
printf
是一个函数


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

从计算机的角度来看
int
double
是内存中表示数字的几个字节,而
printf
是一个可以调用和执行的函数。阅读以下内容:

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

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

然而,如果你想知道它们是如何实现的,大多数计算机都使用有符号整数系统;以及,用于实现双重和浮动的

但C语言无法保证这一点。

只有复杂的数据类型可以定义为结构,原始数据类型只是如何在内存中布局位的约定。这些约定的详细信息在每个编译器中都有不同的定义,跨越几十个文件处理在这些基本类型上定义的操作的不同机器代码实现

实际上,gcc中可能会有数百个文件,其中定义了
int
的部分实现:几十个体系结构(x86、x86-64、PowerPC)上的每个操作(强制转换为char/uint/double/float/etc,加、乘、减、除等)都需要进行代码生成、优化,宽度和更多定义


我建议对编译器的工作原理有一个基本的了解(标准过程:标记化、解析、分析、IL生成、优化、代码生成)我所使用的类,但我听到其他人说它有点过时。

int
double
是语言关键字。“它们是语言的一部分。”奥列夏尔斯沃思:是的,就是这样,我也回答了这个问题,但我在哪里能找到它们呢?它应该是开源的吗?或者它是在编译器中定义的?@int80:事实上,它们将被内置到编译器中。它们只是指向内存中的一些字节,所以int可以接受数字和字符符号等等,这只是一个意外。。。?我了解到数据类型可以用结构定义。。。它们必须在某个地方定义…所以如果我很幸运,我可以在编译器源代码中找到该文件。。。和“可以”将“int”例如更改为“foo”?哇,我甚至还没有想过编译器的前端部分,是的,所以我刚刚谈到了后端“代码生成器”,关键字“int”也将在标记器的某个地方定义。所以数据类型的定义在编译器中?谢谢。就这样;-)