【发布时间】:2021-04-24 03:34:34
【问题描述】:
编辑:问题是由于书中的错误,因为它现在有点旧了。
我正在用 C++ 编写一个简单的程序,当我重新编译我的代码时,终端会运行我编译文件的先前版本。我的源代码的名称是 exercise.cpp。这是我重构之前的源代码:
#include "std_lib_facilities.h"
int main()
{
cout << "Please enter your first name and age\n";
string first_name;
int age;
cin >> first_name;
cin >> age;
cout << "Hello, " << first_name << " (age " << age << ")\n";
}
这里是稍微重构的版本:
#include "std_lib_facilities.h"
int main()
{
cout<<"Please enter your first name and age:\n";
string first_name = "???";
int age = -1;
cin>>first_name>>age;
cout<<"Hello, "<<first_name<<" (age "<<age<<")\n";
}
当我编译重构文件并在终端中运行 ./exercise 时,它会给出第一个源代码的输出。例如,如果您运行第一个编译文件并且在第一个源代码中输入“22 Mark”,则输出为“Hello, 22 (age 0)”。 (或者不是 0 内存中的任何垃圾值)。如果您运行新编译的文件并且您的输入相同,我希望输出为“Hello, 22 (age -1)”,因为我已经在重构代码中初始化了我的变量。但是,输出仍然是“Hello, 22 (age 0)”。这是什么原因造成的,我该如何解决?
附言。我使用 Visual Studio Code 作为编辑器,使用 GNU 编译器作为编译器。
【问题讨论】:
-
查看可执行文件上的时间戳。验证是否构建了新代码。也许禁用您的防病毒软件。简而言之,您可能需要在获得帮助之前调试情况,以便您可以回答导致此问题的原因。还要检查构建输出中的错误消息。也许您之前的可执行文件仍在运行,因此构建失败。
-
我检查了时间戳并验证了新代码已经构建。我的两个构建输出中也没有收到任何错误消息。任务构建成功。 @drescherjm
-
作为双重检查,在输入之前添加
std::cout << "Compiled " << __DATE__ << " " << __TIME__ << std::endl;以验证运行二进制文件中的目标文件实际编译的日期和时间。 -
我检查了它,它编译没有任何问题。我还通过更改第一个输出来检查它,并且每次编译时它都会更改。唯一的问题是年龄变量在给定非整数值时不会输出 -1。我仍然不知道背后的原因。 @JohnD
标签: c++ terminal compilation