Неправильный вывод с использованием g ++ на Linux и исправить на Windows - PullRequest
1 голос
/ 28 октября 2019

Я изучаю c ++ и решил написать небольшую программу для практики в переменных областях. Проблема в том, что я получаю другой (и неправильный, на мой взгляд) вывод в Linux после компиляции и выполнения, в то время как в Windows все правильно. Вот код:

/*main.cpp*/
#include <iostream> 
using namespace std;

extern int x;
int f();

int main() { 
    cout << " x = " << x << endl; 
    cout << "1st output of f() " << f() << endl;
    cout << "2nd output of f() " << f() << endl;

    return 0;
}



/*f.cpp*/
#include<iostream>
using namespace std;

int x = 10000;
int f() {
    static int x = ::x; 
    {
        static int x = 8;
        cout << x++ << endl; 
    }
    cout << x++ << endl; return x;
}

команда, которую я набираю на linux: $ g ++ main.cpp f.cpp && ./a.out

Желаемый вывод (вывод Windows):

x = 10000
8
10000
1st output of f() 10001
9
10001
2nd output of f() 10002

Учитывая (Linux) вывод:

x = 10000
1st output of f() 8
10000
10001
2nd output of f() 9
10001
10002

Как я могу сказать, кажется, что программа Linux пропускает cout функции int f (), любые идеи, почему такая вещьслучается

1 Ответ

1 голос
/ 28 октября 2019

После получения помощи из комментариев я понял, что проблема связана с тем, как код выполняется в разных компиляторах, мне удалось устранить «ошибку», явно вызвав функцию f (), сначала выполнив ее команды, а затем получиввозвращаемое значение. Я объяснил это так хорошо, как мог, вот код:

int main() { 
    cout << " x = " << x << endl; 
    int temp=f();
    cout << "1st output of f() " << temp << endl;
    temp=f();
    cout << "2nd output of f() " << temp << endl;

    return 0;
} 
...