我需要为我的作业实现一些Linux shell的命令,其中包括5个或6个命令。 不知道要为每个命令执行哪些参数…
我打算使用C ++,但是当我向同事询问可以select的语言是什么语言时,他说C / C ++不是一个传统意义上的程序,它是一个function性的工具,而且绝对必须用C语言来实现。
我在C ++中的观点是重用代码,更好地分离关注点,事实上我不太了解C语言 – 其实,我学习了C ++并且很享受它。
那么,你有什么意见呢? 提前致谢。
这是一个单独的任务 – 我的意思是对于我的每个人,所以没有合作应该。
我有低级编程经验,指针算术,void *等
首先 :使用你所知道的。
如果你能以熟悉的路线到达那里,没有理由进入未知的水域。
无论如何,C ++在你的情况下是一个非常可行的选择。 所以,你不会错误地使用它。
第二 :你的朋友是错的。 (我会用更粗俗的话,但我会很好的。)
C ++和C都是编译语言。 一个C ++程序绝对是一个传统意义上的程序。 C和C ++都是静态类型的。
PS:你仍然可以使用C ++编译器来编译C程序。 你可以用C ++来完成C语言的所有功能。
你知道C ++,你喜欢它,所以使用C ++。
或者,你想要的挑战,你想学习C,这将有助于作业觉得有用的东西,所以使用C.
PS。 “必须在C执行”是完全废话。 不要陷入这个陷阱。
这真的没关系。 你最舒服的是什么? 你可以用任何一种语言写得相当好的代码。
如果你只是想完成某些工作,我可能会使用python或其他脚本语言来完成这个任务。
这不是直接回答你的问题,但也许它会回答你的情况。 我记得自己在做类似的功课的时候
我相信最初的目标是使学生熟悉手册页“C程序的C库例程”的第3部分,以及第2节“Unix和C系统调用”。 我记得问教练我是否可以用C ++写作业,并且没有答案 – C是一个要求。
无论如何,我的观点是,大部分时间我都浪费在解析命令行参数上。 公用事业本身是微不足道的。 事后看来,没有人指出man 3 getopt
会对我采取行动是一种耻辱。 我希望你会变得更聪明,然后我做到了。
由于这是作业的作业,所以我会与指导老师或评分工作人员核实一下。 一个好的教师应该能够理解一个C ++程序和一个C程序,如果这个程序不是疯狂写的(但是学生怎么知道什么是疯子?)
如果您的教师不关心您使用的语言,如果您想更快完成工作,请使用您最熟悉的语言。 如果您想要挑战,请使用您不太熟悉的语言。 学校是犯错误的好时机,但在学期结束时,成绩是重要的。
最后,如果作业的目的是要学习API,不要太纠结试图包装本地API或重新发明它。 如果你能想出一个优雅的包装来证明你理解API,那么很好,否则你的教师可能会讨厌你的程序对API而不是API。
如果你知道并且对C ++感到满意,我想不出有什么理由不把它用于这个目的。
你的朋友不知道他们在说什么。 C和C ++都是正常编译的(解释器存在,但正常的用法是编译它)。 最后,一个C编译的二进制文件和一个C ++编译的二进制文件的行为方式是一样的。 使用任何你想使用的,这是一个偏好的问题。
关于你的第一个参数:在C中也实现了很好的代码重用和更好的关注分离。
关于你的同事的论点:我不知道传统意义上的程序是什么。 没有任何技术或法律问题可以阻止使用C ++作为解释器。
关于你的第二个参数:如果你不知道C,不要用C语言编程(除非你的目标是学习它,这很棒)。 对于只有一把锤子的人来说,每一个问题看起来都像一个钉子 。 这可能是一个笑话,但我认为这也是一个很好的建议。
使用任何你更舒适的。
但是,用C你可以欺骗 🙂
不要欺骗! 各种公用事业的来源不一般用途。
如果你觉得与C ++舒适…使用它。 您可以使用Boost程序选项库来管理输入参数。
其实,你可能会同时使用。 这很大程度上取决于你正在写什么命令。
C ++有一个缺点,可执行文件的大小。 如果您真的在实现shell命令,那么您希望可执行文件变得更小,C更可能生成更小的可执行文件。 当然,这不是唯一的限制。 你想要的代码也很容易工作。 因此,混合的方法可能会带来好处。 对于像输入处理很少的ls这样的命令,可以使用C stdio.h库来完成所有输出,这样就不必包含更大的C ++ iostream库。
OTOH,这是一项家庭作业,所以我怀疑你会得到一个大的可执行文件的大小,所以在这个特定的情况下,你可能应该坚持你最了解的东西。
如果你只是实现shell命令,我会认为最简单的方法是编写一个bash脚本。 这样你就可以使用shell了,只需要学习简单的语法,然后管道和重定向命令。