getChar_unlocked在Windows中未申报
getchar_unlocked in windows undeclared
这是我的代码:
#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;
}
我知道此处定义为scan
的功能比scanf
快,并且在编程竞赛中非常有用。但是由于某种原因,此代码无法在Windows上使用,而是在Linux上工作。我该怎么做才能使其在Windows上工作?我正在使用Dev-C 的g++
编译器。
getchar_unlocked
不是C 标准功能,因此它在Windows上不起作用也就不足为奇了。我认为这是一个POSIX标准,但是Windows编译器不支持所有POSIX函数。
如果您用getchar
替换getchar_unlocked
,则可以使用,尽管该算法似乎不太正确。
您可以通过有条件的汇编进行此操作,例如
#ifdef _WINDOWS
// no getchar_unlocked on Windows so just call getchar
inline int getchar_unlocked() { return getchar(); }
#endif
Windows具有等效的,_GetChar_Nolock,它是Windows特定的。
请参阅此链接:
https://msdn.microsoft.com/en-us/library/4y2e9z0c.aspx
因此,如果您对非thearreadSafe版本感到满意,并且想要最好的性能,您可以做这样的事情:
#ifdef WIN32
// no getchar_unlocked on Windows so call _getchar_nolock
inline int getchar_unlocked() { return _getchar_nolock(); }
#endif
getchar_unlocked()
主要用于竞争性编程,但是,如果要在其他地方使用它,只需确保一次只使用1个线程即可。同样适用于putchar_unlocked()函数。它是一个同等的POSIX,因此Windows编译器不支持它。但是,您可以使用两个 -
正常速度
int getchar_unlocked(){return getchar();}void putchar_unlocked(char _c){putchar(_C);}
快速速度
int getchar_unlocked(){return _getChar_nolock();}void putchar_unlocked(char _c){_putchar_nolock(_C);}
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 在Linux for Windows上编译C++代码时出错
- 在Windows上用C++裁剪HBITMAP
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- Windows/Cygwin - 不能使用 pybind11 - 犯错误
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 在Windows中以.exe的形式运行c++
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 无法在windows控制台中为C++程序提供必要的输入
- 在Windows中查找扬声器输出的当前音量级别
- Windows.h与GLFW.h的接口
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 在Linux和C++中的Windows上,散列字符串值会产生不同的输出
- Active Directory:从网络服务帐户下运行的Windows服务调用ADsOpenObject时失败
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 无法使用Qt Creator在Windows中构建yaml-cpp