c++ - 如何用c编写编程语言和头文件

标签 c++ c

c或c++头文件是用什么语言编写的。我的另一个大疑问是,由于计算机只能理解二进制,人们如何编写计算机真正可以理解的编程语言和编译器?

最佳答案

C 和 C++ 头文件分别编写为 C 和 C++ 源代码。这些 [1] 中的代码被编译并链接到您的可执行文件中。

编译器是用某种任意语言编写的 - 如今,您通常将现有的 C 或 C++ 编译器用于某些可用的平台,但很久以前,该过程基本上是用汇编程序编写一个非常基本的编译器[或其他可用且合适的语言],然后使用它引导到更高语言的编译器。

当然,如果您刚刚发明了“Chip X”,并且还没有可移植汇编器,那么您还必须编写一个汇编器。希望您有其他具有编程语言的计算机 - 但如果我们假装没有可用的计算机,那么我们就必须“手动”提出二进制代码,然后将其输入计算机的 ROM 中。该代码也许能够执行一些非常简单的任务,例如将“Hello”打印到某些输出设备。一旦工作正常,我们将其扩展为具有加载程序,这样我们就可以加载二进制文件(或以其他方式添加新命令)。一个非常简单的编辑文件的编辑器,并且文件存储将非常有用。然后我们可以开始编写一些可以读取人类可读指令(汇编代码)的代码并从中生成二进制文件。一旦我们有了汇编器,我们就可以用汇编器编写一个程序,它接受(非常简单)C 输入并输出汇编器。汇编该代码,我们就有了一个(非常简单的)C 编译器。现在我们可以使用简单C编译器在“简单C”中编写更好的C编译器。坚持一段时间,你最终会得到一个像样的 C 编译器...但这可能需要几年的工作,除非你已经做过很多次这种事情...

任何可以读取文本文件、比较字符串并以“自由格式”输出二进制文件的语言都可以用来编写编译器。这当然不是小事。

我已经为 Pascal 编写了一个编译器,它使用 LLVM 编译器框架来生成实际的代码含义,我已经完成了编译器的简单部分,高质量编译器的困难部分是代码生成过程,并且我只在 LLVM 中间表示中执行此操作,这就是 LLVM 的整体思想 - 它是一种简化的机器代码“语言”,然后 LLVM 为您的语言提供 IR -> 机器代码。我的编译器目前有大约 13400 行 C++ 代码 - LLVM 中的代码生成和优化有数百万行 - 其中大部分我什至不知道它是如何工作的 [除了简单概述该函数根据描述做什么之外]

[1] 通常还有一些库,其中包含不适合直接存储在 header 中的较大函数。这些是使用与您将源代码构建为二进制文件相同的编译器[或与其兼容的编译器]构建的。

关于c++ - 如何用c编写编程语言和头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34383864/

相关文章:

c++ - 如何使用没有复制构造函数的给定类初始化元组

c - 两个相似的功能,不同的结果

c - C 中出现运行时错误

c - 如果数组是 char *str[],为什么++str 操作会导致错误,但如果是 char *argv[](主函数的参数之一)则不会?

c++ - Fortran 中的指针与 C/C++ 中的指针究竟有何不同?

c++ - 声明/定义顺序依赖

c++ - 将控制台应用程序转换为 Windows 应用程序

c - 汇编中的跟踪程序。

c++ - 加载 DLL 不初始化静态 C++ 类

C++网络爬虫