DIY一款C/C++编译器

一. 原理

1.1 记事本编程

我们用记事本新建一个文件,文件后缀改成.c,例如文件名叫做"1.c",在文件里写上最简单的C或者C++代码,

1 #include<stdio.h>
2 #include<stdlib.h>
3 int main()
4 {
5     printf("记事本编程");
6     system("pause");
7     return 0;
8 }

不使用VS或者CodeBlock打开它的情况下,怎样编译、运行呢?

1.2 使用CodeBlock自带的MinGW编译。

假设你的计算机已经安装了带有MinGW的CodeBlock,如果没有可以去下载http://www.codeblocks.org/downloads/26

点击windows左下角开始---->运行,输入cmd进入命令行,在命令行中进入CodeBlock的MinGW文件夹,运行windows批处理文件 mingwvars.bat 。效果如下图所示:

这样的效果就说明mingwvars.bat批处理文件运行了。

我们再进入要被编译的文件“1.c”所在的文件夹,输入"gcc 文件名"也就是“gcc 1.c”,这样1.c就被编译了。

此时,我们会发现在1.c所在的文件夹下会生成一个名为“a.exe”的可执行文件,我们输入"a.exe"执行它,就能执行1.c里所写的程序:

记事本编程几个字,就是printf输出的结果。

1.3 使用Visual Studio自带的编译器编译。

假设你已经安装了Visual Studio(我的版本是2012),在windows的开始菜单中找到Visual Studio文件夹——>打开”开发人员工具“——>

通过命令行进入1.c所在文件夹——>输入cl 1.c ——>你就能够在1.c所在文件夹下看到生成了1.exe 和 1.obj两个文件——>输入1.exe运行它

我们就能看到执行的效果了。

通过上面的两个例子我们可以知道,.c文件是可以通过命令行调用编译器的编译命令执行的,因此我们只需要在程序中调用编译器指令,就能DIY一款自己的C/C++ IED

二. C/C++ IDE开发流程

2.1 建立工程

我们在Visual Studio下新建一个MFC应用程序工程,选择”多个文档“,勾上”选项卡式文档“,项目类型选择”Office“,视觉样式和颜色选择”office 2007 浅绿色“(你可以选自己喜欢的颜色),

文件扩展名输入”c“,并且勾选文件类型的预览处理支持、缩略图支持、搜索处理支持

用户界面功能 选择使用功能区,并且勾上所有选项,

高级功能全部勾选

基类选择CRichEditView

点击完成,建立好工程。

2.2 界面编辑

在工程的资源视图中找到Ribbon,双击IDR_RIBBON,编辑选项卡,我们从工具栏里拖拽一个类别到选项卡中,这个类别的Caption属性改为”编译“,并且往这个选项卡中拖拽一个面板,这样这个类别就有两个面板了,分别修改其Caption属性问GCC和VC——>再分别往两个面板中拖入两个按钮,Caption设置为”运行“。

这样界面就完成了。

2.3 将我们的编译器的文本设置为纯文本

如果,此时运行程序,用我们的编译器并且写一段文本并且保存,再在记事本中打开文本的话,可以发现有很多多余的文本,这些是用于记录文字样式等信息的文本,这是不能编译的(不信你可以试试,我就不上图了),因此我们要设置编译器保存的文本问纯文本。

如果不理解,只要跟着做就行。

在工程中打开MyIDEDoc.cpp,找到void CMyIDEDoc::Serialize(CArchive& ar)这个函数,我们可以看到最下面有一行注释

// TODO: 如果作为文本进行序列化,则设置 CRichEditDoc::m_bRTF = FALSE

我们只需要把代码移动到下一行并且加上”;“即可:

 1 void CMyIDEDoc::Serialize(CArchive& ar)
 2 {
 3     if (ar.IsStoring())
 4     {
 5         // TODO: 在此添加存储代码
 6     }
 7     else
 8     {
 9         // TODO: 在此添加加载代码
10     }
11
12     // 调用基类 CRichEditDoc 将启用
13     //  容器文档的 COleClientItem 对象的序列化。
14     // TODO: 如果作为文本进行序列化,则设置
15     CRichEditDoc::m_bRTF = FALSE;
16     CRichEditDoc::Serialize(ar);
17 }

此时,保存的就是纯文本了。

2.4 实现简单的MinGW编译

我们的核心技术就是要运行MinGW的批处理文件,驱动编译

首先我们打开CodeBlock的MinGW文件夹,为了不影响CodeBlock本身的编译,我们复制一份新的 mingwvars.bat 并且命名为 mingwvars_A.bat,用记事本将其打开,并且添加如下命令:

1 @echo.
2 @echo Setting up environment for using MinGW with GCC from %~dp0.
3 @set PATH=%~dp0bin;%PATH%
4
5 c:
6 cd C:\Users\Administrator\Desktop
7 gcc 2.c
8 a.exe

意思是,进入要编译的文件所在文件夹,编译名为”2.c“的文件,然后执行它。

接着我们添加事件处理程序

在VS工程中,右键点击GCC的”运行“按钮,点击”添加事件处理程序“,类列表选择”CMianFrame“——>点击添加编辑

然后我们在按钮的事件处理程序中加入代码:

1 void CMainFrame::OnButton2()
2 {
3     // TODO: 在此添加命令处理程序代码
4     system("\"D:\\CodeBlocks\\MinGW\\mingwvars-A.bat\"");
5 }

把路径改成你的minGW所在文件夹,文件名改成你自定义的批处理文件名即可。

然后我们运行工程——>进入界面——>选择左上角的编译——>在文件编辑框内随便输入一些代码,保存到之前设置的批处理文件所要编译的文件夹,保存为"2.c",你也可以取别的名,改批处理文件即可,这是简单的例子,你也可以通过写入文件编译任何文件名的文件。

——>点击GCC的运行

我们看到执行了。

2.5 实现简单的VC编译器

首先我们进入Vs安装目录文件夹下的VC文件夹,跟调用minGW一样,我们找到VC的批处理文件vcvarsall.bat,复制一份,重命名为vcvarsall-A.bat——>编辑——>在:x86下的

call "%~dp0bin\vcvars32.bat" 与 goto :SetVisualStudioVersion之间添加代码:

:x86
if not exist "%~dp0bin\vcvars32.bat" goto missing
call "%~dp0bin\vcvars32.bat"

C:
cd C:\Users\Administrator\Desktop
cl 2.c
2.exe

goto :SetVisualStudioVersion

保存,意思是,进入C:\Users\Administrator\Desktop文件夹也就是桌面,然后编译2.c这个文件,然后执行编译好的2.exe文件。

接着我们在VS工程的VC 的” 运行“按钮下添加事件处理程序(方法同上):

1 void CMainFrame::OnButton3()
2 {
3     // TODO: 在此添加命令处理程序代码
4     system("\"F:\\Microsoft Visual Studio 11.0\\VC\\vcvarsall-A.bat\"");
5
6 }

运行工程,添加2.c文件夹,点击VS版面下的运行,得到下面的效果:

在2.c文件夹下我们会发现2.obj和2.exe文件。

这样就简单的实现了一款C/C++的IDE

时间: 2024-10-15 21:09:58

DIY一款C/C++编译器的相关文章

富文本编译器的小说

最近在研究富文本编译器,也在网上看了一些资料,大致了解了一下几款富文本编译器,比如说(kissy_editor,ueditor,TinyMCE,kindeditor).每个都是js牛人开发出来的,让我一度羡慕嫉妒恨啊,但回头想想自己去实现一个能获取更多知识. 于是我开始查阅一些资料,首先我去了解里面的功能是怎么实现的,结果我发现一个共同点就是通过js提供的execCommand函数去实现里面每个功能,这让我一下子恍然大悟,这个就是富文本编译器的核心机制,无论是哪种富文本编译器都会引用execCo

C语言开发工具(编译器|IDE)推荐

常用的C语言开发工具有很多,每个开发工具所支持的库函数和对标准的实现都有差异.不过,对于初学者,可以忽略这些细节,选择一款使用广泛.上手容易的开发工具才是王道. Windows平台下推荐Visual C++ 6.0 Visual C++ 6.0简称VC或者VC6.0,是微软1989年推出的一款C/C++编译器,界面友好,调试功能强大.VC6.0是一款革命性的产品,非常经典,win7.win8时代,仍然有很多企业和个人在使用,很多高校也将VC6.0作为C语言的教学基础,作为上机实验的工具.本教程中

模板引擎artTemplate及模板预编译器TmodJS的使用入门

一.为什么要使用前端模板? 主要为了解决UI层与业务逻辑的纠缠不清.比如我们需要根据后端返回的数据动态生成一个表格或者类似表格的DOM(比如ul > li等)时,按照传统的方式,需要我们先获取数据,然后在页面的js中通过遍历数据.提取相关数值以及动态拼接html字串的方式,生成最终的DOM.这样就产生了UI与业务逻辑的纠缠.如果只是偶尔或者局部使用可能问题不明显,但如果代码量庞大.业务或数据十分复杂的情况下,这种方式产生的代码会十分不利于后期维护,这想必是每一个开发人员都不愿看到的.因此,便产生

一个优雅的程序猿教你认识C语言编译器

编程语言有很多种,主要分为三大类,分别是机器语言.汇编语言.高级语言.计算机只能理解识别二进制代码,也就是0和1.我们用机器语言开发我们得记住计算机所有的指令代码和代码涵义.这样的编程枯燥而繁琐费力,也容易出错.汇编语言应运而生,汇编语言用助记符代替机器指令,但助记符量大难记,而且也枯涩的很. C语言可以这样比喻,是一门非常强大的内功心法,学会它可以做到一法通万法.这也是它至今不衰的原因.说了这么多C语言的优点,现在来说说它的缺点.C语言最大的优点也是它最大的缺点,拥有强大的力量时应时刻保持警惕

7款易上手C语言编程软件推荐

C语言是一门历史很长的编程语言,其编译器和开发工具也多种多样,其开发工具包括编译器,现举几个开发工具供大家选择,当然也要根据自己的操作系统来选择适合自己的开发工具. 好多刚开始接触c语言的朋友都想知道用上面软件开发c语言比较好,一般来说微软的东西肯定是最好的,更适合新手学习,等上手了就可以接触别的软件了. Microsoft Visual C++ .Microsoft Visual Studio. DEV C++.Code::Blocks.Borland C++.WaTCom C++.Borla

C++能否成为你新的脚本语言

一些背景 第一个我真正喜爱的编程语言是 C.我花了不少时间才找到它:当我还是一个孩子,我就开始在珍贵的ZX Spectrum上使用 Z80 汇编.那些日子是你能够真正掌握你的电脑的时候,你不需要苹果,谷歌,微软或者其他任何人的允许就能写一个程序.我在漂亮的128K ZX Spectrum +2上学习了在超出 CPU 寻址空间时对内存块分页.直到我进入大学,我才拥有一台 IBM PC 机 .我玩遍了电子表格,试图修复现存的 Fortran 程序,用土耳其字符给键盘驱动打补丁,还学了点 Pascal

C语言开发工具

常用的C语言开发工具有很多,每个开发工具所支持的库函数和对标准的实现都有差异.不过,对于我这样得初学者,可以忽略这些细节,选择一款使用广泛.上手容易的开发工具才是王道.在网上找了一下,Windows平台下推荐Visual C++ 6.0,Linux平台下推荐使用GCC,由于本人用得是unix系同当让用GCC啦. 1) Windows平台下推荐Visual C++ 6.0 Visual C++ 6.0简称VC或者VC6.0,是微软1989年推出的一款C/C++编译器,界面友好,调试功能强大.VC6

写给我初中表弟的一份信

我现在是一名大三的学生狗,学的是信息管理与信息系统专业,本人对这个专业不是很感兴趣,但是也让我接触了计算机.互联网.人工智能.电子商务....等等在这个时代正热的知识.也对计算机编程.网络有了比较强烈的兴趣.大一刚开始的时候我发现自己开始学习计算机相关知识很是吃力,因为我不知道计算机是如何工作的,因为我不知道计算机思维方式,因为在此之前从来没有真正意义上很计算机恋爱,记得那时候对计算机只能是暗恋,今年过年回家的时候带着笔记本,下载了好多好电影,本来回家之后打算给小表弟分享的,但是这小子不领情,根

一起talk GCC吧((第一回:GCC介绍)

各位看官们,大家好,从今天开始,我们讲大型章回体科技小说 :GCC.闲话休提,言归正转.让我们 一起talk GCC吧! 看官们,我们常说的GCC是一个绰号,它真正的名字是:GNU Compiler Collection.中文叫作GNU编译 套件.因为这个绰号的名声太大了,所以大家都这么称呼它.GCC生于1987年,也是一个典型的80后. 它的父亲为美国人Richard Stallman.不过它没娘,可怜的孩子. 作为一款优秀的编译器,GCC可以支持常用的各种语言,比如C,C++等,还有现在流行