在 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",但这不是系统自带的,需要进行 ...
随机推荐
- MySQL必知必会-官方数据库表及SQL脚本导入生成
最近在复习SQL语句,看的是MySQL必知必会这本书,但是发现附录中只有表设计,没有表的具体数据.所以在学习相应的语句中体验不是很好,去网上查了数据库的内容,自己慢慢导入到了数据库中.把表放出来作为参 ...
- 《Java练习题》习题集五
编程合集: https://www.cnblogs.com/jssj/p/12002760.html Java总结:https://www.cnblogs.com/jssj/p/11146205.ht ...
- Python自定义包引入【新手必学】
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:sys_song python中的Module是比较重要的概念.常见的情 ...
- 在.Net Core中记录日志
一个完善的系统,必然会有非常完善的日志记录,用户的操作.系统的运行状况等信息被完整的记录下来,方便我们对系统进行维护和改进..net core 也为日志记录提供了内置的支持. 在控制台程序中记录日志 ...
- elasticsearch7.5.0+kibana-7.5.0+cerebro-0.8.5集群生产环境安装配置及通过elasticsearch-migration工具做新老集群数据迁移
一.服务器准备 目前有两台128G内存服务器,故准备每台启动两个es实例,再加一台虚机,共五个节点,保证down一台服务器两个节点数据不受影响. 二.系统初始化 参见我上一篇kafka系统初始化:ht ...
- centos安装与配置keepalived+nginx高可用
一.安装启动keepalived 1.下载keepalived 在centos系统中,用wget下载最新版本: mkdir tool cd tool wget https://www.keepaliv ...
- 原生JS实现移动端轮播图
功能描述: 自动无缝轮播图片,底部小圆点跟图片保持一致:手指左右移动轮播图,移动距离大于50px播放下一张(或上一张),小于50px则回弹 具体功能实现: 1.定时器 自动轮播图片 先声明一个inde ...
- Android 菜单 Menu
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to th ...
- CentOS7安装ffmpeg
首先在官网http://ffmpeg.org/download.html下载ffmpeg-4.2.1.tar.bz2 以下为安装步骤: 1.使用工具将源码包上传至Linux主机 2.解压源码包 进入该 ...
- (好文转载与总结)Windows10安装ubuntu18.04
Windows10中安装Ubuntu,期间踩了非常多的坑,最终安装成功了,梳理下来Windows10装Ubuntu的步骤还是比较简明的. 制作Ubuntu系统U盘 Windows磁盘为新系统进行分区, ...