getchar_unlocked 在 Windows 中未声明

pro*_*ngs 4 c++ scanf

这是我的代码:

#include <stdio.h>

void scan(int* i)
{
    int t=0;
    char c;
    bool negative=false;
    c=getchar_unlocked();
    while(c<'0'&&c>'9')
    {
        if(c=='-')
            negative=true;
        c=getchar_unlocked();
    }
    while(c>'0'&&c<'9')
    {
        t=(t<<3)+(t<<1)+c-'0';
        c=getchar_unlocked();
    }
    if(negative)
        t=~(t-1); //negative
    *i=t;
}

int main(int argc, char const *argv[])
{
    int i;
    scan(&i);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我知道这里定义的函数scanscanf编程竞赛更快并且非常有用。但出于某种原因,此代码不适用于 Windows,而是适用于 Linux。我该怎么做才能让它在 Windows 上运行?我正在使用g++Dev-C++的编译器。

joh*_*ohn 5

getchar_unlocked不是 C 或 C++ 标准函数,因此它在 Windows 上不起作用也就不足为奇了。我认为这是 POSIX 标准,但 Windows 编译器不支持所有 POSIX 功能。

如果您替换getchar_unlockedgetchar,它会起作用,尽管算法似乎不太正确。

你可以用条件编译来做到这一点,例如

#ifdef _WINDOWS
// no getchar_unlocked on Windows so just call getchar
inline int getchar_unlocked() { return getchar(); }
#endif
Run Code Online (Sandbox Code Playgroud)

  • 如果您知道它是在哪些系统上定义的,则可以使用条件编译。但我不知道有什么完全自动的方法可以做到这一点。 (2认同)