【发布时间】:2021-10-20 21:39:12
【问题描述】:
例如,
float f = 2.4;
int n = f + 1;
n = 3
变量 f 在内存中是 0x4019999a, 所以我认为 f + 1 = 0x4019999a + 1 但计算机没有。 如何知道 f 是“浮动”?即使 f 在内存中只是 0x4019999a。 变量的类型是否存储在某个地方?
【问题讨论】:
-
编译器完成后,类型实际上会丢失。它们可以通过检查编译器生成的汇编指令来推断,但类型本身并不存储在任何地方。
-
编译器在执行它的工作时,会将标识符类型的信息保存在一个内部表中(不一定会输出到生成的二进制文件)。使用
gcc,您可以尝试将debugging options 添加到二进制文件的生成中。 -
计算机中的一切都是数字。什么是手段来自它的context。在处理器级别,许多算术指令不知道数字是有符号还是无符号,但程序员使用它设置的不同标志。在您的示例中,编译器会生成适当的指令,因此数据类型是固有的。
-
这能回答你的问题吗? how data types are processed by Compiler
标签: c compiler-construction typeinfo