为什么 _sleep(1000) 不能在 Xcode 中编译?

Why won't _sleep(1000) compile in Xcode?

我有一个程序应该从 10 倒数到 0,每次倒数时应该等待一秒钟,然后使用 cin.flush() 刷新输出。教授在 class 中演示了这一点并且它完美地工作,但是,当我回到家时 Xcode 给我一个错误,说 _sleep(1000) 是使用未声明的标识符 '_sleep' - 这是不应该是这种情况,因为我导入了特殊命令,它只应该在 windows 编译器中使用 _sleep。

简而言之,这需要在 windows 和 mac 编译器中编译,我应该通过这些编译器定义来完成。但出于某种原因 Xcode 一直试图告诉我这是错误的。

#ifdef GPP
#include <unistd.h>
#else
#include <cstdlib>
#endif


int main()
{
    for (int timer = 10; timer >= 0; timer--)
    {
        cout << timer;
        cout.flush();

        //compiler functions
        #ifdef GPP
        Sleep(1); //One second to sleep on GPP compilers
        #else
        _sleep(1000);//On windows 1000ms sleep time
        #endif

        cout << '\r';
    }
}

你在任何地方定义过 GPP 吗?如果不是,那么代码将使用 _sleep(1000),它是 windows 特定的,不会在 mac 上工作。例如,如果像这样编译它应该可以工作:

g++ -DGPP

但是你还是需要把Sleep改成睡眠,因为也没有Sleep功能

#ifdef GPP                                                                      
#include <unistd.h>                                                             
#else                                                                           
#include <cstdlib>                                                              
#endif                                                                          
#include <iostream>                                                             

using namespace std;                                                            

int main()                                                                      
{                                                                               
    for (int timer = 10; timer >= 0; timer--)                                   
    {                                                                           
        cout << timer;                                                          
        cout.flush();                                                           

        //compiler functions                                                    
#ifdef GPP                                                                      
        sleep(1); //One second to sleep on GPP compilers                        
#else                                                                           
        _sleep(1000);//On windows 1000ms sleep time                             
#endif                                                                          

        cout << '\r';                                                           
    }                                                                           
}  

睡眠和变体不可移植,它们是 OS 特定的。 这就是我们使用标准的原因:

std::this_thread::sleep_for (std::chrono::milliseconds(your time here));