2012-01-06 7 views
10

Bene, questo deve essere uno sciocco. Qui di seguito è un codice non-può-essere-più semplice in C. Non può compilare dicendo "riferimento non definito a dormire". Ma penso che includo tutto intestazione di sistema che ho bisogno ...Riferimento non definito a "sleep" ma ho incluso <unistd.h>

#include <stdio.h> 
#include <unistd.h> 
int main() 
{ 
    printf("Test starts.\n"); 
    sleep(1); 
    printf("Test ends.\n"); 

    return 1; 
} 
+3

"Riferimento non definito" sembra non collegare a qualcosa di cui ha bisogno. – Kevin

+1

OS/Compiler? C'è forse più codice di questo con un refuso? Questo compila e collega con gcc 4.6.1. – JoeFish

+0

@MengfeiMurphy, che compilatore stai usando? Quale riga di comando stai scrivendo per compilarlo? Dicci tutto quello che puoi –

risposta

33

Prova questo in cima:

#ifdef __unix__ 
# include <unistd.h> 
#elif defined _WIN32 
# include <windows.h> 
#define sleep(x) Sleep(1000 * x) 
#endif 

Questo codice vi permetterà di utilizzare due diversi funzioni con lo stesso nome, che fanno esattamente la stessa cosa. E compila sotto diverse piattaforme.

+0

Meraviglioso! Hai dannatamente ragione! Sto usando win7 + 'WinGW'. Questa è la prima volta che incontro in pratica problemi portatili. Hai altri esempi simili? –

+0

In realtà non mi viene in mente ma puoi fare un sacco di cose in questo modo. È pulito e semplice. – wazabit

+0

funziona effettivamente, oltre ai miei problemi con i flag nei codeblocks, ora posso eseguire il codice che ho creato su un sistema Linux in windows grazie a questa intestazione – thinksinbinary

-2

secondo il manuale di Linux Programmer, tutto ciò che serve è unistd.h di dormire per funzionare. Controlla se hai i percorsi inclusi correttamente impostati. Btw Se la vostra utilizzando finestre che non sembra come u si utilizza, è possibile utilizzare sonno includendo Windows.h

2

Se si utilizza il sistema operativo Windows, includere il file di intestazione windows.h nel programma e modificare sleep() in Sleep().

Il problema sarebbe scomparso.

Spero che questo aiuti.

+0

Windows La funzione 'Sleep()' è in millisecondi, mentre * Nix's 'sleep()' è in secondi. L'equivalente * NIX di 'Sleep()' è 'usleep()'. Vedi la risposta di Wazabit per il modo corretto di creare codice che usi 'sleep()' portable. –

Problemi correlati