C--(C99的删减版)语言的编译器(64位 Windows平台)
和C语言的主要区别:
- 变量的类型声明时,类型后缀(数组和指针)后置,如int指针的数组的类型声明 :int (a)[2] -> int a [2], 但是多维数组访问时,数组访问顺序与C语言一致.
- 全局变量,函数,自定义类型的定义和声明在文件的任何位置,同时不需要进行函数原型声明,extern关键字只进行外部对象声明而不定义.
- 不支持联合体和结构体的传参和返回,仅支持传递和返回它们的指针.
- 无预处理机制.包括include宏指令,取而代之的是import语句,所起作用和.ink文件相似:导入外部声明语句,编译器还对所导入的 函数和变量进行类型检查,以及去除未使用的声明.
- 不支持将局部变量声明为const 变量.
运行C-编译器所需环境: jdk17或以上的java运行时.
构建并运行C--编译器所生成的汇编文件所需条件:64位 X64平台的Windows, ML64汇编器, Link链接器.
构建步骤:
- 打开Visual studio中的命令行开发工具:Developer Command Prompt for VS 2022;
- 使用ml64命令编译./Production/Code/目录下产生的目标汇编文件,得到$source.obj文件;
- 当需要使用C语言标准库时,由于Windows平台下某些对象定义在头文件,所以需要借助CL编译器对标准库的头文件进行预处理, 用它编译./Production/Code目录下的driver.cpp文件,得到driver.obj文件;此时,目标汇编文件需含有asmMain函数作为入口,且不能含有main函数,否则 在链接时发生符号冲突;
- 使用link $source.obj driver.obj /Fe$source.exe 命令产生可执行文件