在 Linux 下学习 C 语言有什么好处?
链接:https://www.zhihu.com/question/23893390/answer/832610610
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
在Windows环境下,你使用IDE写一个简单的hello.c。然后按下F11,直接编译运行,然后在你的源码目录下会自动生成一坨杂七杂八的各种文件,你根本不知道这些文件是干嘛用的,对不对?甚至你不知道你运行的hello程序到底是怎么生成的。
但是在Linux下面就不一样了,你可以知道程序编译的每一个过程、细节,你甚至可以控制程序编译的每一个过程!
就以你的hello.c为例:一般来讲,从一个C语言源文件,到生成最后的可执行文件,流程如下;
- C 源文件: 使用vim编写一个简单的helloworld程序
- 预处理:生成预处理后的C源文件 hello.i
- 编译:将C源文件翻译成汇编文件 hello.s
- 汇编:将汇编文件汇编成目标文件 hello.o
- 链接:将目标文件链接成可执行文件




在Linux下面,可以就可以通过gcc命令精确控制每一个编译、链接过程
$ gcc -E hello.c > hello.i //会生成预处理后的C源文件hello.i $ gcc -S hello.i //将hello.i编译成汇编文件hello.s $ gcc -c hello.s //将汇编文件hello.s汇编成hello.o $ gcc hello.o -o hello //将目标文件链接成可执行文件hello $ ./hello // 运行可执行文件hello
按照上面的流程做一遍,你就知道了程序编译、链接的每一个过程,而且可以控制它~,如果有兴趣,我们甚至还可以反汇编我们的可执行程序:
$ objdump -D hello > hello.S
看到没,我们可以将一个二进制可执行文件,通过反汇编,生成汇编文件,然后去研究它。
看到这里,你可能会抬杠了:但是在Linux下敲命令很麻烦啊,每次敲来敲去,哪有在Windows下按一下F11方便!
别急,在Linux下我们也可以使用快捷键:make命令
在你的hello.c 文件目录下创建一个Makefile文件,添加以下内容:
hello:hello.c
gcc hello.c -o hello
修改后保存退出vim,然后在当前目录下敲击命令:$ make
你会发现,make会自动编译你的源程序,在当前目录下生成可执行文件:hello。如果你想往这个项目添加新的C源文件main.c时,你可以直接修改这个Makefile,然后就直接make编译就行了。
hello:hello.c main.c
gcc hello.c -o hello main.c
如果你嫌每次修改Makefile麻烦,我们可以重新写一个新的Makefile,自动搜索我们当前目录下的所有C源程序文件、编译、链接,生成可执行文件:
.PHONY:all clean
SRCS = $(wildcard *.c)
EXE = hello
all: $(EXE)
$(EXE):$(SRCS)
gcc -o $@ $^
clean:
rm -f $(EXE)
使用上面的Makefile,你在Makefile所在的当前目录下添加新的C源文件,然后make,你会发现make会自动编译你当前目录下的所有C文件。
其实,在Windows下的各种集成开发环境(IDE),如你所说的DEV C++,包括VC++ 6.0,其实它们底层也是靠make/makefile来编译程序的。只不过名字、规则稍微不一样而已,如在VC++6.0的安装包下面,你会找到类似的一个叫做nmake的EXE文件,其实它就相当于Linux环境下的make。
小结:
在Linux下学习C语言,我们可以通过底层命令熟悉程序编译、链接的具体过程,甚至可以控制、优化编译流程。而在Windows下面,使用带界面的集成开发环境(IDE),集程序的编辑、编译、链接、调试于一体,一条龙服务,交互功能友好。可以更方便我们开发。
环境使用建议:
如果你以后想从事C++/Java桌面开发,学习C语言只是你的一个过渡、打基础阶段。那么建议在Windows下使用各种IDE开发工具学习C语言。
如果你以后想从事Linux环境下的C语言开发、嵌入式开发,建议从一开始,就在Linux环境下学习C语言。
在 Linux 下学习 C 语言有什么好处?的更多相关文章
- 在Linux下开始C语言的学习
为什么要在linux下学习C语言? linux下可以体验到最纯粹的C语言编程,可以抛出其他IDE的影响 环境配置简单,一条命令就足够.甚至对于大多数linux发行版本,都已经不需要配置C语言的环境 查 ...
- linux下的C语言开发 进程创建 延伸的几个例子
在Linux下面,创建进程是一件十分有意思的事情.我们都知道,进程是操作系统下面享有资源的基本单位.那么,在linux下面应该怎么创建进程呢?其实非常简单,一个fork函数就可以搞定了.但是,我们需要 ...
- Linux 下 expect 脚本语言中交互处理常用命令
Linux 下 expect 脚本语言中交互处理常用命令 1. #!/usr/bin/expect 告诉操作系统脚本里的代码使用那一个 shell 来执行.这里的 expect 其实和 Linux 下 ...
- Linux下的C语言编程
一.在Linux下的C语言编程所需工具(下面所列举的都是我编程所用的工具) 1.文本编辑器 Vim 2.编译链接工具 gcc 3.调试器 gdb 4.项目管理工具 make和makefile 二.VI ...
- Windows下学习C语言有哪些集成开发软件?
前言 初学者学习C语言遇到的最大困难想必就是搭建环境了,相当多的初学者就是被搭建环境导致放弃了学习编程,就我自己的经验而言,初学编程不应该受限于环境,使用成熟好用的环境就可以了,之后熟悉一些可以在慢慢 ...
- windows下的c语言和linux 下的c语言以及C标准库和系统API
1.引出我们的问题? 标准c库都是一样的!大家想必都在windows下做过文件编程,在linux下也是一样的函数名,参数都一样.当时就有了疑问,因为我们非常清楚 其本质是不可能一样的,源于这是俩个操作 ...
- 在Linux下运行C语言程序
市面上常见的Linux都是发行版本,典型的Linux发行版包含了Linux内核.桌面环境和各种常用的必备工具,国内使用较多的是Ubuntu(乌班图).CentOS.Deepin(深度Linux).本教 ...
- Linux下简单C语言小程序的反汇编分析
韩洋原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 写在开始,本文为因为参加MOO ...
- Linux下查看Go语言软件运行情况
在Linux下,使用"jps"可以查看用Java语言写的软件的运行情况,如果要查看GO语言写的软件的运行情况,可以使用"gops",但这不是系统自带的,需要进行 ...
随机推荐
- SpringBoot电商项目实战 — ElasticSearch接入实现
如今在一些中大型网站中,搜索引擎已是必不可少的内容了.首先我们看看搜索引擎到底是什么呢?搜索引擎,就是根据用户需求与一定算法,运用特定策略从互联网检索出制定信息反馈给用户的一门检索技术.搜索引擎依托于 ...
- Rancher 2.3.3发布!默认支持K8S 1.16
2019年11月28日,Rancher Labs发布了Rancher全新版本2.3.3,该版本默认支持Kubernetes1.16,此外还带来了其他功能与优化. 目前,Rancher的Latest和S ...
- C#线程学习笔记六:线程同步--信号量和互斥体
本笔记摘抄自:https://www.cnblogs.com/zhili/archive/2012/07/23/Mutex_And_Semaphore.html,记录一下学习过程以备后续查用. ...
- 【高可用架构】开发机上部署Deploy项目(一)
准备 部署项目的细节可以看这个,传送门Centos 7部署Laravel项目 主机IP:192.168.10.17 [高可用架构]系列链接:待部署的架构介绍 演示 部署Deploy composer ...
- 阿里云ECS部署Redis主备哨兵集群遇到的问题
一.部署 详细部署步骤:https://blog.csdn.net/lihongtai/article/details/82826809 Redis5.0版本需要注意的参数配置:https://www ...
- P1983 车站分级 思维+拓扑排序
很久以前的一道暑假集训的题,忘了补. 感觉就是思维建图,加拓扑排序. 未停靠的火车站,必然比停靠的火车站等级低,就可以以此来建边,此处注意用vis来维护一下,一个起点和终点只建立一条边,因为不这样的话 ...
- .Net Core 项目发布到Linux - CentOS 7(一)
由于项目的需求,需要发布到Linux服务器上,在这里记录一下我发布的过程. 安装Linux 安装liunx系统很简单,网上也有很多教程,我是直接使用阿里云的CentOS 7.7 64位 部署环境 Li ...
- swoole简介
swoole是PHP的扩展,又不是一个普通的扩展.普通的扩展只是提供一个库函数.而swoole扩展在运行后会接管PHP的控制权,进入事件循环.当IO事件发生后,swoole会自动回调指定的PHP函数. ...
- VueUI -- iView4.0简单使用
一.iView(View UI) 1.简介 官网:https://www.iviewui.com/ 仓库:https://github.com/view-design/ViewUI iView 与 V ...
- leaflet实现风场图(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...