Niedziałający getch()

0

Witam. W ramach projektu na studia muszę napisać pewien program konsolowy, jednak już na samym początku napotkałem dziwny problem, którego nie potrafię rozwiązać. Dostaliśmy od prowadzącego kod źródłowy biblioteki conio2.h, który mamy wykorzystać w projekcie do obsługi konsoli. Problem w tym, że jeśli ustawię konfigurację na Release, to funkcje z tej biblioteki jakby nie działały poprawnie. Przy konfiguracji Debug wszystko jest okej. Przykładowo:

 
#include <iostream>
#include "conio2.h"

int main()
{
    char a = 0;
    cout << "Wcisnij q aby zakonczyc\n";
	do {
		a = getch();			
	} while (a != 'q');
	return 0;
}

Taki najprostszy program w konfiguracji Debug działa prawidłowo, kończąc swoje działanie, gdy użytkownik naciśnie klawisz Q. Za to gdy ustawię konfigurację na Release, program blokuje się na instrukcji* getch(); * i nie reaguje na wciskane klawisze. Pierwszy raz spotkałem się z czymś takim i nie mam zielonego pojęcia co może być tego przyczyną. Korzystam z Visual Studio 2015.
Tutaj wstawiam kod źródłowy conio2, który dostaliśmy od prowadzącego: conio2.h conio2.cpp
Może komuś z was uda się odnaleźć źródło problemu.

1

Skoro to jest Visual Studio, to masz w pakiecie <conio.h> a w nim funkcję _getch(). nie trzeba zewnętrznych bibliotek.

Nie wiem co to za conio2. Być może wasz prowadzący sam go napisał, albo znalazł gdzieś w necie. Widzę tam brzydki hack pod koniec:

#pragma data_seg(".CRT$XIU")
static cb *autostart[] = { Conio2_Init };

Podejrzewam że hak jest niekompatybilny z link time code generation, które jest domyślnie aktywne w trybie release.
Więc musiałbyś albo przerobić nagłówek by takich cudów nie było albo wyłączyć LTCG w opcjach projektu.

0

W takim razie chyba najlepiej będzie jak skorzystam z biblioteki dołączonej do visuala. Dzięki za odpowiedź.

1 użytkowników online, w tym zalogowanych: 0, gości: 1