【问题标题】:Why does this code lead to Compile Error?为什么这段代码会导致编译错误?
【发布时间】:2019-11-05 15:17:22
【问题描述】:

我有去年的试卷,我一直在复习。我有一点问题。正如你可以看到下面的代码,我的老师说给定的代码将导致编译错误,但我在我的计算机上的 Visual Studio 上尝试了它,它与输出一起工作:4.0 代码是:

float x = 3.0;
float y = 2.0;
int j = 10;
int k = 4;                 

j = j / k + y;

关于这件事我明天会参加考试。我应该写什么作为答案?

【问题讨论】:

  • C++ 还是 C?它们是不同的语言。选择一个。
  • 我看到一个潜在的逻辑错误,但我对编译器错误感到茫然。
  • 如果警告被视为错误,x 未被使用可能会导致错误。编辑:这是在函数中还是仅在文件范围级别?如果这是您的整个源文件,那么这可能是被询问的错误。 j = j / k + y; 需要在函数中。
  • @CoderCharmander 是的,你可以。
  • 嗯,这似乎很明显,但它没有 main() 函数,所以它肯定不会自行编译。但是,如果它在函数体中,它应该可以工作,除了已经说过的。并且可能在j / k + y 中记下运算符优先级,这有点像j / (k+y)

标签: c++ algorithm compilation


【解决方案1】:

我在这里看到的只有两个问题:

  • x 变量未使用,如果您的编译器设置为对未使用的变量启用警告,并且您已要求编译器将所有警告转换为错误,则该变量可能是错误的。但是,它通常可以使用默认编译器设置正常编译。
  • 赋值语句将float 值存储在int 变量中,这可能是您的老师所了解的。但是,此转换是自动的,不会导致错误(但可能会生成警告)。

换句话说,您的老师似乎对此有误,实际上并没有尝试编译此代码。


正如其他人所说,“代码需要包含在 int main() 函数中”也是一种非常可靠的方法,如果你的老师是合理的,就可以正确回答问题。


如果你因为声明没有编译时错误而被标记为错误,请与老师交谈并展示给他们看。出于类似的原因,我成功地在考试中反驳了分数。 (我有一个问题问为什么o.ToString; 是 C# 程序中的编译时错误。教授正在寻找“缺少括号”。正确答案是“o 不在范围内。”)

【讨论】:

  • 谢谢。也是的,编译器工作但产生了警告
【解决方案2】:
int main() {
  float x = 3.f; // unused-variable warning
  float y = 2.f;
  int j = 10;
  int k = 4;

  j = j / k + y;
}

如果使用

编译,将使用 g++ 编译
g++ -Wall -pedantic -pedantic-errors test.cpp

您只会收到警告,因为x 未被使用。

【讨论】:

  • 他指出你没有提到的另一个警告并没有错,因为这就是我们在谈论的全部内容。
  • @MarkStorer 我不同意,我正在努力帮助人们,我花时间去做。是的,您可以发表评论,但投反对票意味着我的回答不正确。
  • 修复“无效”错误^^.
  • 那么抱歉
猜你喜欢
  • 2011-03-16
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
相关资源
最近更新 更多