我可以让编译器忽略操作系统特有的方法吗?

问题描述 投票:0回答:1

我有一个简单的小游戏,主要依靠用户输入来移动游戏板。最初,我们实现了标准的输入,并处理了每次移动都要按回车键的问题;但是,我们现在正在研究特定平台的用户输入方法,这样我们就可以坚持按字符键移动,而不是等待回车键。

为此,我们设置了这样的环境。

#if defined(_WIN32) || defined(_WIN64) || defined(_WINDOWS_)
    #define PLATFORM_NAME "windows" // Windows
    #include <conio.h>
#elif defined(__APPLE__) || defined(__linux__)
    #define PLATFORM_NAME "unix"
#endif

我们计划使用 _getch() 当检测到windows平台时,则使用 getchar() 基于unix的。

目前我们的输入调用是这样设置的。

void handleKeybinds() {
    char ascii = 0;
    if (PLATFORM_NAME == "windows") {
        ascii = tolower(_getch());
    } else {
        system("/bin/stty raw");
        ascii = tolower(getchar());
        system("/bin/stty cooked");
    }
    //move player
}

这在windows下编译时完全正常(因为conio.h是兼容的),但是,结果是一个未定义的 _getch() 因为在linux服务器上,conio不作为头文件被包含。我们如何让编译器在windows以外的任何地方完全忽略这一行,就像头文件只包含了 conio.h 当在windows系统上。

谢谢你!我有一个简单的小游戏机,主要是依靠用户输入来移动游戏板。

c++ cross-platform user-input conio
1个回答
0
投票

感谢BessieTheCow的帮助。我让我的用户输入在两个平台上都能正常工作了! 正如上面他们的评论中提到的,我已经把平台定义检查移到了输入被记录的地方,这使得编译器可以忽略备用平台上的未声明方法!

char GameBoard::getInputs() {
    char ascii = 0;
    #if defined(_WIN32) || defined(_WIN64) || defined(_WINDOWS_)
        ascii = tolower(_getch());
    #else
        system("/bin/stty raw");
        ascii = tolower(getchar());
        system("/bin/stty cooked");
    #endif

    return ascii;
}

谢谢你的帮助

© www.soinside.com 2019 - 2024. All rights reserved.