【问题标题】:Why does this code work in Dev-C++ but not in Visual C++?为什么此代码在 Dev-C++ 中有效,但在 Visual C++ 中无效?
【发布时间】:2015-02-01 20:49:02
【问题描述】:
#include <stdio.h>

int main() {

int f,c;
int lower,upper,step;

lower = 0;
upper = 300;
step = 20;


while (f <= upper) {

    c = 5 * (f - 32) / 9;
    printf("%d\t%d\n",f,c);
    f = f + step;
}

return 0;

}

我忘了写f = lower,但它也能运行并得到正确答案。我不能发图片。我认为这是错误的,因为它不能使用 Visual C++ 运行,但为什么呢?

【问题讨论】:

  • 您的问题是什么?您是否在问为什么即使您忘记添加初始化变量 f 的行它仍然有效?
  • 使用 indeterminate value is undefined behavior 在您的情况下,它似乎被初始化为零,但是一旦您调用未定义的行为,结果是不可预测的。
  • 是的,我认为它已经磨损了。我正在学习 K&R。
  • 在你的while语句中,f没有被定义。
  • 这是否适用于 Dev-C++ 而不是 Visual C++ 或其他方式?

标签: c dev-c++


【解决方案1】:

使用时:

int lower,upper,step;

标准不保证变量被初始化为0,但一些编译器可以。如果我没记错的话,Visual Studio 在调试版本中将函数局部变量初始化为 0 而不是在发布版本中。

线

while (f <= upper) {

由于f 未在您的程序中显式初始化,因此无法保证以可预测的方式运行。

【讨论】:

  • VS2010 警告 f 没有被初始化。
  • @user3150832,可以通过不同的编译器设置轻松禁用。
  • @user3150832 好吧,因为它真的没有初始化,用 0 或其他东西初始化它,不要因为一个编译器会用某些东西初始化值而像这样运行它,因为其他编译器不会.你写的代码是未定义的行为。
猜你喜欢
  • 1970-01-01
  • 2011-09-09
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
相关资源
最近更新 更多