我有一个关于程序如何编译的问题。如果我用 C++ 编写一个程序,并且我犯了一个错误,例如,输入:
int x = 4;
cout << x % 10 = 0;
// assignment error
程序是否仍会编译此代码并出现错误,或者在错误修复之前根本不会编译程序?
换句话说,编译的代码会出现错误吗?
这实际上取决于编译器。 标准区分 可诊断的错误和未定义的行为之间。 在这种情况下 对于未定义的行为,任何事情都可能发生;在许多情况下, 标准选择此类别是因为它不合理 期望编译器甚至能够检测到这样的错误。 在 在可诊断错误的情况下,编译器需要 输出一条消息;除此之外,它可能或多或少会做它所要做的事情 想要。
在实践中,当编译器检测到错误时(包括, 某些编译器,某些类型的未定义行为),它会 不仅输出错误消息,还会设置一个内部标志 防止代码生成并导致其返回错误 系统状态(以便构建系统不会继续 并尝试链接),它将尝试重新同步输入,在 以便发现更多错误。 (最后一个并不总是可行的 正确,并且由单个错误导致的情况并不罕见 许多连锁错误,这没有任何意义。)没有一个 然而,这是必需的,并且其发生方式可能因人而异 编译器,甚至取决于编译器选项。 其他编译器 选项,例如将警告视为错误,可能会使编译器 不合规,因为它将无法编译技术上合法的 程序。 YMMV.
我使用的所有编译器都不会编译代码,直到所有错误都得到修复(除非有一些我从未听说过的隐藏编译器标志)。编译器,顾名思义就是编译代码。如果有错误,则意味着它无法理解代码中写入的内容。如果它无法理解它,它就无法将其翻译(编译)为另一种语言(另一种编程语言或二进制)。
另外,请阅读有关编译器的维基百科页面: https://en.wikipedia.org/wiki/Compiler,它应该可以帮助您了解编译器的工作原理。