编译的C++代码不产生终端输出,但VSCode调试器会,使用-static标志可以解决这个问题,但不是一个可行的解决方案

hc2pp10m  于 11个月前  发布在  Vscode
关注(0)|答案(1)|浏览(119)

我想打印两个三位数乘积的所有回文数。

#include <iostream>

int main() {

    for (int i = 999; i > 100; i--) {
        std::cout << "Checking numbers for i=" << i << "\n";
        for (int j = 999; j > 100; j--) {
            int k = i * j;
            int temp_k = k;
            int reverse_k = 0;
            int remainder_k;

            while(temp_k != 0) {
            remainder_k = temp_k % 10;
            reverse_k = reverse_k * 10 + remainder_k;
            temp_k /= 10;
            }
            
            if (k == reverse_k) {
                std::cout << k << "\n";
            }
        }
    }
}

当我单击Terminal > Run build task时,我得到一个可执行文件和以下输出:

Starting build...
C:/msys64/mingw64/bin/g++.exe -fdiagnostics-color=always -g C:\mydirectory\palindromic.cpp -o C:\mydirectory\palindromic.exe

Build finished successfully.
 *  Terminal will be reused by tasks, press any key to close it.

当我运行这个可执行文件时,出现一个终端窗口,然后关闭。完全没有输出(这不是由于没有使用std::cin.get();关闭而导致窗口关闭非常快的情况)。
但是,如果单击Run > Start Debugging,则会获得VSCode中的所有终端输出,即

[...]
Checking numbers for i=112
84448
65856
48384
42224
29792
23632
Checking numbers for i=111
[...]

我已经尝试重新安装MSYS2,我有一个PATH变量指向C:\msys64\mingw64\bin。这并没有解决问题。where对于gcc、g++和gdb的输出:

where g++

C:\msys64\mingw64\bin\g++.exe

where gcc

C:\msys64\mingw64\bin\gcc.exe

where gdb

C:\msys64\mingw64\bin\gdb.exe

如果我在VS Code终端中使用g++ -Bstatic -static palindrome.cpp编译,然后运行a.exe,它就可以工作。静态链接我的库不是一个很好的解决办法。

cgvd09ve

cgvd09ve1#

使用Visual Studio 2019而不是VS Code允许我编译行为符合预期的可执行文件。重新安装VS Code还允许我编译行为符合预期的可执行文件。

相关问题