未定义引用'getchar_unlocked'错误

时间:2014-03-29 07:12:14

标签: c linker-errors

我正在尝试使用c编程和代码块作为IDE解决一个codechef练习问题subtraction game 1。我找到了一种比scanf()函数更快地读取输入的方法,但是当我运行程序时,我收到错误“未定义引用'getchar_unlocked'错误”。你能告诉我我做错了什么,还有其他方法可以更快地阅读输入吗?

#include<stdio.h>
inline int fastread()
{
        int noRead=0;
        char p=getchar_unlocked();
        for(; p<33;) {
                p=getchar_unlocked();
        };
        while(p>32) {
                noRead = (noRead << 3) + (noRead << 1) + (p - '0');
                p=getchar_unlocked();
        }
        return noRead;
};
unsigned int gcd(unsigned int a, unsigned int b)
{
    if (b == 0)
       return a;
    else
       return gcd(b, a % b);
}
int main()
{
    int t,i,answer=0;
    unsigned int n;
    t = fastread();
    while(t--)
    {
        n = fastread();
        unsigned int a[n];
        for(i=0;i<n;i++)
            a[i]=fastread();
        answer = gcd(a[0],a[1]);
        for(i=2;i<n;i++)
            answer = gcd(a[i],answer);
        printf("%u\n",answer);
    }
    return 0;
}

1 个答案:

答案 0 :(得分:2)

在SO

上引用this回答
  在Windows中不推荐使用

getchar_unlocked,因为它是线程不安全的   getchar()的版本。

getchar_unlocked与scanf或cin相比具有更少的开销,不是c或c ++的标准功能,您可以在此处始终使用getchar()。

或者你可以编写一个函数getchar_unlocked()来返回getchar()的值,以便在机器测试中使用它,如果你必须在你的在线问题中使用它。