用于实现少量Linux shell命令(作业)的语言 - 普通C或C ++?

时间:2009-10-20 14:03:42

标签: c++ c linux shell

我需要为我的作业实现一些Linux shell命令 - 其中包含5个或6个,包括ls。不太了解为每个命令实现哪些参数...
我打算使用C ++,但当我向我的同事请教建议选择哪种语言时 - 普通的C或C ++,他说解释器不是传统意义上的程序,它是一种功能工具,绝对必须在C中实现。
我对C ++的论点是很好的代码重用,更好地分离关注点,事实上我不太了解C - 实际上,我学习了C ++并且很喜欢它。
那么,你对此有何意见?提前谢谢。
这是个人作业 - 我的意思是我小组中的每个人,所以没有合作。
我有低级编程经验,指针算术,无效*等。

12 个答案:

答案 0 :(得分:9)

首先:使用你所知道的。

如果你能以熟悉的路线到达那里,没有理由进入未知的水域。

无论如何,C ++在你的环境中是一个非常可行的选择。所以,你只是使用它没有错。

第二:你的朋友错了。 (我会用更严厉的话,但我会很好。)

C ++和C都是编译语言。 C ++程序绝对是传统意义上的程序。 C和C ++都是静态类型的。

PS: 您仍然可以使用C ++编译器来构建C程序。您可以使用C ++在C语言中执行所有

答案 1 :(得分:7)

你知道C ++,你喜欢它,所以使用C ++。

或者,你想要挑战,你想学习C,这将有助于家庭作业感觉有用,所以使用C。

PS。 “必须在C中实现”是完全废话。不要陷入那个陷阱。

答案 2 :(得分:1)

真的没关系。你最舒服的是什么?您可以用任何一种语言编写合理的代码。

  • C如果您对程序/模块化编程范例感到满意
  • C ++如果你想使用面向对象和/或通用编程工具

如果您只是想完成某项工作,我可能会使用python或其他脚本语言完成此任务。

答案 3 :(得分:1)

这不是直接回答你的问题,但也许它会回答你的情况。我记得自己在回来的时候得到了类似的作业......

我认为,最初的目标是让学生熟悉手册页“C程序C程序”的第3部分,以及第2部分“Unix和C系统调用”。我记得问教练我是否可以用C ++编写作业,并且没有答案 - C是必需的。

无论如何,我的观点是大多数时候我浪费在解析命令行参数上。公用事业本身是微不足道的。事后看来,没有人向man 3 getopt指出我是一种耻辱。我希望你能比我更聪明。

答案 4 :(得分:1)

由于这是一项家庭作业,我会与教师或评估你工作的人核实。一个优秀的教师应该能够理解C ++程序以及C程序,如果它不是以疯狂的方式编写的(但是学生怎么知道什么是疯狂的?)

如果您的教师不关心您使用的语言,请使用您最熟悉的语言(如果您希望更快地完成工作)。如果您想要挑战,请使用您不太熟悉的语言。学校是犯错误的好时机,但在学期结束时,你的成绩很重要。

最后,如果作业的目的是学习API,请不要太过于陷阱尝试包装本机API或重新发明它。如果你能想出一个优雅的包装器来证明你理解API,那很好,但是你的教练可能会因为你的程序不依赖API而不是它而烦恼。

答案 5 :(得分:0)

如果您对C ++了解并且对C ++感到满意,我想不出为此目的不使用它的理由。

答案 6 :(得分:0)

你的朋友不知道他们在说什么。 C和C ++都是正常编译的(解释器存在,但正常用法是编译它)。最后,C编译二进制文件和C ++编译二进制文件的行为方式相同。使用你想要使用的任何东西,这是一个偏好的问题。

答案 7 :(得分:0)

如果您对C ++感到满意......请使用它。您可以使用Boost Program Options库来管理输入参数。

答案 8 :(得分:0)

关于你的第一个论点:在C中也实现了良好的代码重用和更好的关注点分离。

关于你同事的论点:我不知道传统意义上的程序是什么。没有技术或法律问题阻止将C ++用于解释器。

关于你的第二个论点:如果你不懂C,不要用C编程(除非你的目标是学习它,这很好)。 对于唯一的工具是锤子的人来说,每个问题看起来像钉子。这可能是一个笑话,但我认为这也是一个很好的建议。

答案 9 :(得分:0)

使用你更舒适的任何东西。

但是,使用C语言,你可以 cheat :)

请勿作弊!各种实用程序的来源不适用于一般使用。

答案 10 :(得分:0)

实际上,您可以同时使用两者。这在很大程度上取决于你正在编写的命令。

C ++有一个缺点,即可执行文件大小。如果您确实在实现shell命令,那么您希望可执行文件很小,而C更可能生成较小的可执行文件。当然,这不是唯一的限制因素。您希望代码也易于使用。因此,混合方法可能会带来好处。对于像ls这样几乎没有输入处理的命令,您可以使用C stdio.h库完成所有输出,这样就不必包含更大的C ++ iostream库。

OTOH,这是一项家庭作业,所以我怀疑你会因为大的可执行文件大小而得到分数,所以在这个特定的例子中你可能应该坚持你最熟悉的东西。

答案 11 :(得分:0)

如果您只是实现shell命令,我认为最简单的方法是编写一个bash脚本。这样你就可以使用shell,只需要学习语法,这很简单,然后管道和重定向命令。