问一个也许不该问的问题

C、C++和Java语言
lk_517
帖子: 200
注册时间: 2006-07-23 15:02
送出感谢: 0
接收感谢: 0
联系:

问一个也许不该问的问题

#1

帖子 lk_517 » 2006-08-06 21:53

刚转到linux环境编程

问一个问题,既然linux下有不少不错的IDE,为什么还要花很多精力研究gcc,gdb?

想code:blocks或者别的ide,都有很好的编辑功能,然后直接compile,build,调试也是图形化。

问题换一个角度 ,就是,学习gcc,g++,gdb,makefile能给我门带来别的什么好处?

除了不用新建project以外。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#2

帖子 eexpress » 2006-08-06 22:08

历史原因也有。linux下的编程方式太多(有上百吧),而且都比win那边简单些(普通的bash就搞定了),简单程序就简单处理。linux也没多少很大的软件。ide也都是架构在这些简单的软件上面的。你看anjuta的搜索是使用grep,自动完成是使用tags。因为以前的unix遗留过来的小软件已经很强了。都可以利用。
● 鸣学
lk_517
帖子: 200
注册时间: 2006-07-23 15:02
送出感谢: 0
接收感谢: 0
联系:

#3

帖子 lk_517 » 2006-08-06 23:04

也就是说,实际上,如果不是编译原理爱好者,是没有必要搞这些的?
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#4

帖子 eexpress » 2006-08-06 23:09

编译软件爱好者?

反正linux的小软件很强。用bash组合起来,几乎可以作任何事情(当然不能太复杂)。我用了很久,至今只是试过一个软件。用anjuta+glade作的。其他的都是bash就完成了。如果你要专门作开发,门类也很多。各种编程方式都不同。而且多数是解释语言。
● 鸣学
头像
ectotherm
帖子: 225
注册时间: 2006-05-23 13:35
送出感谢: 0
接收感谢: 0
联系:

#5

帖子 ectotherm » 2006-08-07 8:17

很简单,用 ide 只是屏蔽你直接使用 gcc, gdb, 等等的细节,Linux 的 c/c++ 编程罕得不使用 gcc 的。

*nix 并不鼓励直接使用 c/c++ 来处理问题,很多东西用脚本就能搞定的。真正能用到 c++ 的地方在 *nix 上算是非常高级的地方了。

makefile 的一个用处是:当你要构架针对不同目标的 3 个以上的版本时,你总不能把 ide 的设置改 3 次,然后分别编译。好吧,只有 3 个目标,如果 10 个 20 个,怎么办?makefile 的好处就是你打 make 它自己根据 makefile 构建 n 个目标,还有部署等等。
lk_517
帖子: 200
注册时间: 2006-07-23 15:02
送出感谢: 0
接收感谢: 0
联系:

#6

帖子 lk_517 » 2006-08-07 9:54

恩,正是因为目前的ide大多数都是基于gcc系列的编译器,我才对单独学习gcc的必要性有了问题

至于unix是否鼓励c/c++,这个可能不在我的考虑范围之列,很多人写程序不仅仅是为了解决系统问题的

楼上说的makefile这个问题确实比较方便,不过,我还是没看出来如此多程序员争先恐后学习gcc,gdb等的理由。

情愿谅我的抛根问底,因为在我学习一个东西之前,我希望直到它是否值得我花很多精力去学它。
头像
ectotherm
帖子: 225
注册时间: 2006-05-23 13:35
送出感谢: 0
接收感谢: 0
联系:

#7

帖子 ectotherm » 2006-08-07 10:04

你在学习之前会有机会考虑是因为你不需要参与别人的协作——换句话说,如果你是参与团队开发,是没有机会考虑的,团队是不可能因为你一个人的考虑而影响整个工作的。

争先恐后去学习 gcc, gdb,打比方说,如果你在一个别人铺满海绵的房间里工作好,还是在一个空空的房间由你自己来铺海绵好?差别是,别人铺好的,你不知道什么地方会疙脚;但是你自己弄的,你非常清楚这个房间是什么样的,海绵能掩盖房间实体的表面,但是无法掩盖其本质——那些硬伤。

自己搞,虽然累,但是要长期开发的时候,是值得的。要快速开发的除外,最好学习 Java,通常认为 C++ 的复杂度非常高,熟悉一个 C++ 的时间可以精通好几次 Java。

有个项目文件也是非常头疼的问题,我是用 VSS 管理并发开发,每次刷新一下项目文件都要丢掉好几个文件,VSS 没有合并项目文件的能力?!CVS 和 SVN 没有试过,我怀疑公司里面有人会架设 SVN 服务器不。
lk_517
帖子: 200
注册时间: 2006-07-23 15:02
送出感谢: 0
接收感谢: 0
联系:

#8

帖子 lk_517 » 2006-08-07 11:47

恩,也许我可以归纳成以下两点:
1 目前大多数linux环境程序员都用gcc,gdb,makefile,因此在你跨入这个行业的时候不得不学

2 在排除一些深层次问题的时候比较有用。

是不是这样?我想,后一点比较吸引人,至于前一点,应该算是历史遗留问题吧,前些年还没有顺手的IDE

呵呵,anyway,谢谢你的回复。
头像
ectotherm
帖子: 225
注册时间: 2006-05-23 13:35
送出感谢: 0
接收感谢: 0
联系:

#9

帖子 ectotherm » 2006-08-07 12:00

linux 上一直不缺顺手的 ide,当然你要不认为 vim emacs 是的话就没法了。

用 gcc, gdb, makefile(主要是 GNU Make) 的原因是因为它们基于 GPL,GNU 的大部分开发也因为此。你的第二点太抽象了,看不懂。

gcc 因为跨平台的特性,所以开发的时候非常上手。当然你也可以用 CodeWarrior,但 cw 因为不是 GPL 的,所以在商用的时候非常碍手。vc, bcc32, icc 等,因为跨平台性能不是很好(vc 是完全没有),所以很少用。谁都想一次投资多处使用,所以 gcc 就是首选了。

gdb 则是因为 *nix 最强大的调试器,当然你也可以用 ddd,但是我没有太多的调试器经验,没有发言权。

makefile 的缺点在于不能跨平台,而且现在也非常少有项目直接手写 makefile 了,都用 autoconf/automake 生成的。代替 makefile 的是 Jam 方案,可惜我还没有学会。Ant, NAnt 主要用于 java, .net 构建,用在 c++ 上很浪费,所以 C++ 用得更多的是 boost::build - BJam,但是我不会现在。
头像
leal
帖子: 1119
注册时间: 2005-08-29 14:49
来自: 杭州
送出感谢: 0
接收感谢: 3 次
联系:

#10

帖子 leal » 2006-08-07 12:53

ddd DDD - The Data Display Debugger


只是能够图形化的显示调试时程序内的数据结构而已,建立在 gdb 之上,可以说只是一个 gdb 的“UI”而已。

makefile 应该说平台独立的,因为 肯定有可适用于 各个平台的 make 程序
用心×恒 | 豆瓣 | 门户 | Blog
头像
ectotherm
帖子: 225
注册时间: 2006-05-23 13:35
送出感谢: 0
接收感谢: 0
联系:

#11

帖子 ectotherm » 2006-08-07 13:16

make 是跨平台,但 makefile 中经常写一些 shell 相关的脚本,跨平台的性能不是很好,除非你写些不依赖于平台的命令。

我事先也说明了
但是我没有太多的调试器经验,没有发言权。
调试器我最喜欢 C++Builder 的 CodeGuard,但现在不用 Windows 了。
lk_517
帖子: 200
注册时间: 2006-07-23 15:02
送出感谢: 0
接收感谢: 0
联系:

#12

帖子 lk_517 » 2006-08-07 14:17

ddd的图形化不是很出色,个人认为还需要很大的提高。

我是正在学习,vim,早就听说学好了对程序员非常有用。不过我对vim编程方面的插件不是很了解,比如自动补齐之类的。楼上几位如果知道能否推荐以下,谢谢。

另外,linux下有code:clocks:http://www.codeblocks.org/,与vs很多东西都有相似之处,而且更快更小,我承认我比较喜欢vs2005这个IDE,虽然它很庞大。我没有用过anjuta,不过linux好象不少程序员用它。

因此我再附加提一个问题,用vim或者emacs写代码,能达到像这些IDE这样,格式美观,切换容易,智能补齐,自动统计symbor,class等?
头像
ectotherm
帖子: 225
注册时间: 2006-05-23 13:35
送出感谢: 0
接收感谢: 0
联系:

#13

帖子 ectotherm » 2006-08-07 14:21

Code::Blocks 但是还是 1rc* 而且 rc 了快 1 年了,还没 release 等得我都没耐心了。

vim 对集成调试功能不是很好,反正我还没看到一个很合理的。emacs 可以,但是我不会用 emacs,emacs 是号称除了不能冲咖啡的最强大编辑器,你说的那些功能应该都没问题,自己去试试看。
lk_517
帖子: 200
注册时间: 2006-07-23 15:02
送出感谢: 0
接收感谢: 0
联系:

#14

帖子 lk_517 » 2006-08-07 15:00

Code::Blocks 是1.0rc2.确实没有release,我在windows下都是用的one night版本。

对于vim,我不要求它集成调试功能,打开另一个终端输入gcc并不是什么麻烦事。而且我上面所举的似乎都是属于编辑器的功能吧?vim也不能达到么?
头像
ectotherm
帖子: 225
注册时间: 2006-05-23 13:35
送出感谢: 0
接收感谢: 0
联系:

#15

帖子 ectotherm » 2006-08-07 15:07

OmniCppComplete 可以做到 C++ 代码的自动完成,其它的工具我还没有去用,最近忙着换工作,没空。
回复

回到 “C/C++/Java”