当前位置:首页 » 编程软件 » 没有编译器能运行c程序吗

没有编译器能运行c程序吗

发布时间: 2025-07-04 09:54:38

c语言这么厉害,它自身又是用什么语言写的编写过程被称为自举

来自一个小白的提问: “C语言本身用什么语言写的?”

换个角度来问,其实是:C语言在运行之前,得编译才行,那C语言的编译器从哪里来?用什么语言来写的?如果是用C语言本身来写的,到底是先有蛋还是先有鸡?

我们假设世界上不存在任何编译器, 先从机器语言说起,看看怎么办。

机器语言可以直接被CPU执行,不需要编译器。

然后是汇编语言, 汇编语言虽然只是机器语言的助记符,但是也需要编译成机器语言才能执行,没办法只能用机器语言来写这第一个编译器了(以后就不用了)。

汇编语言的问题解决了,就往前迈进了一大步,这时候就可以用汇编语言去写C语言的编译器,我们说这是C编译器的老祖宗。

有了这个老祖宗,就可以编译任意的C语言程序了,那是不是可以用C语言本身写一个编译器?只要用老祖宗编译一下就可以了。

OK, 这么一层层上来,终于得到了一个用C语言写的编译器, 真是够麻烦的。

到这个时候,之前那个汇编写的C语言编译器就可以抛弃了。

当然,如果在C语言之前,已经出现了别的高级语言,例如Pascal,那就可以用Pascal来写一个C语言的编译器。

第一个Pascal的编译器据说使用Fortran写的。而作为第一个高级语言的Fortran,它的编译器应该是汇编语言写的。

关于编译器,这里边有个有趣的传说:

传说Unix 发明人之一的 Ken Thompson在贝尔实验室,大摇大摆的走到任何一台Unix机器前,输入自己的用户名和密码,就能以root的方式登录!

贝尔实验室人才济济,另外一些大牛发誓要把这个漏洞找出来,他们通读了Unix的C源码,终于找到了登录的后门, 清理后门以后编译Unix , 运行, 可是Thompson 还是能够登录进去。

有人觉得可能是编译器中有问题,在编译Unix的时候植入了后门, 于是他们又用C语言重新写了一个编译器,用新的编译器再次编译了Unix, 这下总算天下太平了吧。

可是仍然不管用, Thompson 依然可以用root登录,真是让人崩溃!

后来Thompson 本人解开了秘密,是第一个C 语言编译器有问题, 这个编译器在编译Unix源码的时候,当然会植入后门, 这还不够,更牛的是,如果你用C 语言写了一个新编译器,肯定也需要编译成二进制代码啊,用什么来编译,只有用Thompson写的那第一个编译器来编译,好了, 你写的这个编译器就会被污染了,你的编译器再去编译Unix , 也会植入后门 :-)

说到这里我就想起了几年前的XcodeGhost 事件,简单来说就是在Xcode(非官方渠道下载的)中植入了木马,这样XCode编译出的ios app都被污染了,这些app就可以被黑客利用做非法之事。

虽然这个XCodeGhost和Thompson的后面相比差得远,但是提醒我们,下载软件的时候要走正规渠道,从官方网站下载,认准网站的HTTPS标准,甚至可以验证一下checksum。

可能有人问:我用汇编写一段Hello World都很麻烦,居然有人可以用它写复杂的编译器?这可能吗?

当然可能,在开发第一代Unix的时候,连C语言都没有, Ken Thompson 和 Dennis Ritchie 可是用汇编一行行把Unix敲出来的。 WPS第一版是求伯君用汇编写出来的, Turbo Pascal 的编译器也是Anders 用汇编写出来的,大神们的能力不是普通人能想象得到的。

对于编译器来说,还可以采用“滚雪球”的方式来开发:

还是以C语言为例,第一个版本可以先选择C语言的一个子集,例如只支持基本的数据类型,流程控制语句,函数调用...... 我们把这个子集称为C0。

然后用汇编语言写个编译器,只搞定这个语言的子集C0,这样写起来就容易不少。

C0这个语言可以工作了,然后我们扩展这个子集,例如添加struct,指针...... ,把新的语言称为C1。

那C1这个语言的编译器由谁来写? 自然是C0。

等到C1可以工作了,再次扩展语言特性,用C1写编译器,得到C2。

然后是C3, C4...... 最后得到完整的C语言。

这个过程被称为bootstraping , 中文叫做自举。

对于热爱编程的人来说,有一群一起学习一起解答的小伙伴很重要!

这里有一个 C/C++编程学习交流俱乐部 (群),私信我【01】进入!

还有编程学习文件(源码,零基础教程,项目实战教学视频),欢迎初学者和正在进阶中的小伙伴们!

Ⅱ 手机如何运行c需要代码

手机如何运行C需要代码
手机已经成为现代人生活中必不可少的工具,除了常规的通讯功能外,我们还可以在手机上运行应用程序,其中包括使用 C 语言编写的应用程序。但是,为了让手机能够运行C程序,我们需要一些必要的代码。

1. 安装 C 语言编译器
在 Windows 或者 Linux 上编写 C 代码时,我们需要安装 C 语言编译器,以将代码编译成可执行程序。同样地,在手机上运行 C 代码时,我们也需要安装 C 语言编译器。

对于 Android 系统的手机,我们可以通过安装 Termux 应用程序来获得命令行环境。在 Termux 中,我们可以使用命令:

pkg install clang

来安装 C 语言编译器。

2. 编写 C 代码
安装好 C 语言编译器之后,我们就可以在手机上编写 C 代码了。在 Termux 中,可以使用 Vim 或者 Nano编辑器来编辑 C 代码文件。例如,我们可以使用以下命令创建一个名为 test.c 的 C 代码文件:

touch test.c

nano test.c

在这个文件中,我们可以编写任何 C 代码,例如:

#include

int main() {

printf(\"Hello, World!\");

return 0;

}

在这个示例中,我们编写了一个简单的 C 程序,输出 \"Hello, World!\"。编写完毕后,我们需要将代码保存到 test.c 文件中。

3. 编译 C 代码
当我们编写好 C 代码后,下一步就是将代码编译成可执行程序。在 Termux 中,我们可以通过以下命令来编译 test.c:

clang test.c -o test

在这个命令中,我们使用 clang 编译器将 test.c 编译成可执行文件 test。如果编译成功,我们可以通过以下命令在手机上运行 test 可执行文件:

./test

在 Termux 中,我们也可以使用 Makefile 来编译和运行 C 代码。

4. 上传和下载 C 代码
在手机上编写 C 代码时,我们有时需要将代码上传到其他设备中,或者将其他设备中的代码下载到手机中。在 Termux 中,我们可以使用 SCP 命令来实现代码的上传和下载。

例如,如果我们想将当前目录下的 test.c 文件上传到远程主机的 /home/user 目录下,可以使用以下命令:

scp test.c user@remote:/home/user

在这个命令中,我们使用 SCP 命令将 test.c 文件上传到远程主机。

同样地,如果我们想将远程主机上的 /home/user/test.c 文件下载到当前目录下,可以使用以下命令:

scp user@remote:/home/user/test.c .

在这个命令中,我们使用 SCP 命令将远程主机上的 test.c 文件下载到当前目录下。

总结
在手机上运行 C 程序可能是一个有趣的挑战,但是如果你想让它变得更加简单和高效,你可以按照本文介绍的方法来完成。通过安装 C 语言编译器、编写 C 代码、编译 C 代码、上传和下载 C 代码,我们可以在手机上运行 C 程序,让我们的生活更加丰富多彩。

Ⅲ Linux下如何编译,运行C程序需要安装编译器吗

首先一定要安装 gcc (或者 cc )编译器。然后在 Linux 系统下,首先使用 vi 全屏幕编辑程序编辑一个后缀名为 .c 的文件,然后使用 gcc 编译器对你的 C 语言源程序进行编译、连接。最后才能够运行生成后的运行文件(如果你的源程序没有任何编译错误的话)。当然了,在 gcc 的编译过程中,会有很多选择项。这个就是靠编程经验了。

举例如下:
gcc test.c -o myrunfile ( -o 选项指定输出的运行文件名为:myrunfile,如果不指定 -o 选项的话,缺省的运行文件名为:a.out)

Ⅳ 怎么运行c语言程序

在Mac或Linux系统上运行C语言程序,可以按照以下步骤进行

  1. 创建C语言源文件

    • 创建一个文件,命名为main.c。
    • 使用文本编辑器打开main.c文件。
    • 在文件中输入C语言代码,例如:“`c#include

    int main { printf; return 0; } “2. **安装GCC编译器**: 如果系统上未安装GCC编译器,需要通过包管理器进行安装。 在Mac上,可以使用Homebrew安装GCC:brew install gcc。 在Linux上,根据发行版使用不同的命令安装GCC: 对于基于Debian的系统,使用:sudo aptget install gcc。 对于基于RPM的系统,使用:sudo yum install gcc。3. **编译C语言程序**: 打开终端。 导航到包含main.c文件的目录。 使用GCC编译程序:gcc main.c。这将生成一个可执行文件,默认名为a.out或可以通过o选项指定输出文件名。4. **运行编译后的程序**: 在终端中,输入./a.out。 如果指定了输出文件名,例如使用gcc main.c o myprogram,则运行./myprogram`。注意:以上步骤适用于Mac和大多数Linux发行版。在Windows上运行C语言程序通常需要安装额外的编译器和IDE。

热点内容
安卓应用市场消费记录怎么删除 发布:2025-07-04 14:39:47 浏览:29
知道一个服务器的ip地址 发布:2025-07-04 14:20:33 浏览:597
苹果7锁屏密码怎么改 发布:2025-07-04 14:04:44 浏览:710
P三零是什么配置 发布:2025-07-04 13:58:41 浏览:361
哪个安卓机有长方形home键 发布:2025-07-04 13:43:58 浏览:861
android脚本录制 发布:2025-07-04 13:17:47 浏览:342
嵌入式和安卓哪个硬件成本高 发布:2025-07-04 13:05:56 浏览:229
360代理服务器怎么设置 发布:2025-07-04 12:49:49 浏览:515
iphone在哪清除缓存 发布:2025-07-04 12:49:38 浏览:340
代理访问网址 发布:2025-07-04 12:47:50 浏览:400