学习C或C ++会对我的电脑造成危险吗?

刚刚开始学习C或C ++时,是否存在危险知识这样的事情? 换句话说,我有可能“意外地”编写和编译格式化硬盘驱动器的代码片段,使操作系统无法使用,或者更糟糕的情况是静默删除计算机上的随机文件?

像名副其实的东西

格式C:/

要么

rm -rf /

如果我刚刚开始修改低级C代码甚至搞乱库,那么需要注意哪些基本事项?

事实上,这些潜在的危险潜伏着什么是保持开发环境沙盒的日常系统的好策略? 某些修补区域是否更好地留给虚拟化环境?

不需要进入明确的代码示例,但更一般的建议是我很好奇的。

我认为一个好的经验法则是:在编译和运行一些你在网上找到的随机代码片段之前,一定要了解代码。

注意:如果相关,我在OS X上。

我认识到一个好的备份系统是无可替代的。 黑客攻击破坏你的计算机,最多你失去一天或几小时的工作,并且必须恢复。

没有

操作系统已包含针对错误程序的保护。 我们说C是“危险的”只是意味着它有原始指针和数组。

这些东西使得C和C ++类似于硬件,快速和内存效率,但它们确实允许C程序在其自己的内存中篡改掉一些东西。 自己的记忆,而不是任何其他程序。 这不会损坏内存,它只会改变一个C程序所做的事情……通常它会中止。

你不能意外地伤害任何东西,除非你执行一些同样危险的东西,如果键入命令行,比如从程序中传递给system(3)的“rm -rf”。

但是你可以用任何语言产生危险的OS命令。 实际上,在较新的“高级”语言中更容易做到这一点。

你可能会沮丧地粉碎你的电脑,但除此之外,我认为你会没事的。 🙂

几年前在我的386上,我正在学习用C编写低级video卡编码,我一定搞砸了,因为我没有写入特定的VGA寄存器,而是打了声卡而我的电脑发出了最不真实的尖叫声噪声。 完全吓坏了我! 这仍然是安全的,但我学到了一个宝贵的教训 – 权力带来责任。
根据使用C或C ++等语言的性质,您自然希望在较低级别与PC / WorkStation / OS进行交互,以便接受后果。
这就是为什么许多现代操作系统具有“主管”和“用户”级访问权限的原因。 如果您真的想要将PC拧紧,那么请使用DDK

==编辑==记得另一个。 几年前,我正在使用一些定制硬件,并拥有第一个原型板之一。 我正在测试新的声音芯片所以敲了一些快速的代码然后发送它然后我听到了一个巨大的流行音乐,看着像电容器一样慢慢地看着它,并发送它的内容冲向我的眼睛。 幸运的是它只是几英寸的错过了我的脑袋。 谁说C编码对你的健康没有坏处!

特别是对于键盘。 上周我一直在打破我的头,同时在2D平台游戏中修复错误。

如果你真的很担心, 虚拟化! 我怀疑你是否会意外地搞砸了学习C ++的东西,但是如果它让你冷静下来,那么就运行一台虚拟计算机并完成所有开发工作。

如果您在OS X上设置了合理的权限,则无需担心意外删除。

但是,一旦你从用户域转换到内核域,就有可能搞砸你的硬件。

详细说明内核土地开发的可能危险:

  1. 覆盖硬盘部门。

  2. 在其他进程中破坏内存,导致意外行为。

  3. 控制硬件意外后果。 (有可能导致设计不良的硬件过度加热,破坏或重写固件,并带有乱码)。

可以通过在虚拟机中运行来消除这些问题。

不,这不是问题。 与所有其他编程语言一样,C和C ++处理程序中CPU上发生的事情。 当然,您可以进行系统调用来格式化您的硬盘,但“格式化硬盘”不是C ++语言的一部分。 普通的错误代码只是崩溃(或者,当你运气不好时,不会崩溃,只是表现得很奇怪)

在这方面,它并不比Java,Python或任何其他语言更危险。 所有这些都允许您进行可能导致问题的系统调用。 但是只要你保持语言“内部”,使用语言定义的结构(函数,类,指针,循环,其他任何东西),最糟糕的情况就是你破坏了你自己的程序。

唯一的问题是,一旦他们出门,让恶魔重新站起来。

如果没有以root身份登录,则不会对您的计算机造成太大伤害。

只要你没有直接进行系统调用,如果你只是学习C就可能就是这种情况,那么你就不会做任何真正的伤害。 如果您只是编写vanilla C并坚持使用标准库,那么您可以做的最糟糕的事情是删除单个文件,但您必须故意调用该函数来执行此操作。

让我这样说吧:如果在学习C的过程中很容易破坏你的系统,那么在我学习它的第一年里,我已经至少放了十几个。

老实说,当你说validation/理解你从网上运行的代码时,我认为你回答了自己的问题。 如果你给自己买了一本像The C Programming Language这样值得尊敬的书,那么你犯错误的可能性就足以完全摧毁你的计算机了。 你真的必须知道你要写什么来破坏你的系统。 当您以root身份运行或安装某种影响系统稳定性的坏库时,您更有可能意外地rm -rf /。

另外,我强烈建议在学习C ++之前学习C语言。 否则,您将花费时间学习C而无法理解面向对象编程的概念。

当我在大学时,有一个人称自己是一名导师,他从一个自称为老师的人那里学到了这一点,这告诉大家不要使用递归,因为你可能会破坏你的筹码并破坏你的计算机内存。

非常错!

现代操作系统可以很好地保护您免于过于愚蠢。 你必须非常恶意并且知道如何绕过操作系统的安全性。 在这方面,你的另一个问题确实引起了我的一些担忧……也许在这种情况下,相关性并不意味着因果关系?