我有一个关于程序如何编译的问题。如果我正在用C++编写程序,而我犯了一个错误,可以这样说:
int x = 4;cout << x % 10 = 0;// assignment error
程序是否仍会编译并出现错误,或者在修复错误之前根本不编译程序?

措辞不同,编译后的代码会出现错误吗?

最佳答案

这完全取决于编译器。标准区分
在可诊断的错误和未定义的行为之间。在这种情况下
对于不确定的行为,任何事情都可能发生;在许多情况下,
标准之所以选择此类别,是因为这样做不合理
希望编译器甚至能够检测到此类错误。在
如果是可诊断的错误,则要求编译器执行以下操作:
输出消息;除此之外,它或多或少会做些什么
想要。

实际上,当编译器检测到错误(包括
一些编译器,某些类型的未定义行为),它将
不仅输出错误消息,还将设置一个内部标志
防止代码生成并导致其返回错误
系统的状态(这样构建系统将不会继续
并尝试链接),它将尝试重新同步输入,
为了发现更多错误。 (最后一个并不总是可行的
正确,导致单个错误的情况并不罕见
大量的链式错误,这些都不代表任何意思。)
但是,这是必需的,并且发生的方式可能因
编译器,甚至取决于编译器选项。其他编译器
选项,例如将警告视为错误,可能会使编译器
不合规,因为它将无法在技术上编译合法
程式。 YMMV。

10-08 08:37
查看更多