title: warning C4013: 'sleep' undefined; assuming extern returning int
body: <p>My Goal is to get outputs from Dining Philosophers C Program. 
  I am using Visual Studio 2013 on Windows 7 to compile and execute C programs. 
  Got errors stating that pthread.h, semaphore.h were not available.
  Downloaded the same for windows build and included in the project.</p>
  
  <p>Now I get the following 8 errors</p>
  
  <blockquote>
    <p>warning C4013: 'sleep' undefined; assuming extern returning int</p>
    
    <p>error LNK2019: unresolved external symbol __imp__sem_init referenced
    in function _main</p>
    
    <p>error LNK2019: unresolved external symbol __imp__sem_wait referenced
    in function _put_fork</p>
    
    <p>error LNK2019: unresolved external symbol __imp__sem_post referenced
    in function _put_fork</p>
    
    <p>error LNK2019: unresolved external symbol __imp__pthread_create
    referenced in function _main</p>
    
    <p>error LNK2019: unresolved external symbol __imp__pthread_join
    referenced in function _main</p>
    
    <p>error LNK2019: unresolved external symbol _sleep referenced in
    function _philospher</p>
    
    <p>error LNK1120: 6 unresolved externals</p>
  </blockquote>
  
  <p>The Code I have used is`</p>
  
  <pre><code>#include&lt;stdio.h&gt;
  #include&lt;semaphore.h&gt;
  #include&lt;pthread.h&gt;
  
  #define N 5
  #define THINKING 0
  #define HUNGRY 1
  #define EATING 2
  #define LEFT (ph_num+4)%N
  #define RIGHT (ph_num+1)%N
  
  sem_t mutex;
  sem_t S[N];
  
  void * philospher(void *num);
  void take_fork(int);
  void put_fork(int);
  void test(int);
  
  int state[N];
  int phil_num[N] = { 0, 1, 2, 3, 4 };
  
  int main()
  {
      int i;
      pthread_t thread_id[N];
      sem_init(&amp;mutex, 0, 1);
      for (i = 0; i&lt;N; i++)
          sem_init(&amp;S[i], 0, 0);
      for (i = 0; i&lt;N; i++)
      {
          pthread_create(&amp;thread_id[i], NULL, philospher, &amp;phil_num[i]);
          printf("Philosopher %d is thinking\n", i + 1);
      }
      for (i = 0; i&lt;N; i++)
          pthread_join(thread_id[i], NULL);
  }
  
  void *philospher(void *num)
  {
      while (1)
      {
          int *i = num;
          sleep(1);
          take_fork(*i);
          sleep(0);
          put_fork(*i);
      }
  }
  
  void take_fork(int ph_num)
  {
      sem_wait(&amp;mutex);
      state[ph_num] = HUNGRY;
      printf("Philosopher %d is Hungry\n", ph_num + 1);
      test(ph_num);
      sem_post(&amp;mutex);
      sem_wait(&amp;S[ph_num]);
      sleep(1);
  }
  
  void test(int ph_num)
  {
      if (state[ph_num] == HUNGRY &amp;&amp; state[LEFT] != EATING &amp;&amp; state[RIGHT] != EATING)
      {
          state[ph_num] = EATING;
          sleep(2);
          printf("Philosopher %d takes fork %d and %d\n", ph_num + 1, LEFT + 1, ph_num + 1);
          printf("Philosopher %d is Eating\n", ph_num + 1);
          sem_post(&amp;S[ph_num]);
      }
  }
  
  void put_fork(int ph_num)
  {
      sem_wait(&amp;mutex);
      state[ph_num] = THINKING;
      printf("Philosopher %d putting fork %d and %d down\n", ph_num + 1, LEFT + 1, ph_num + 1);
      printf("Philosopher %d is thinking\n", ph_num + 1);
      test(LEFT);
      test(RIGHT);
      sem_post(&amp;mutex);
  }`
  </code></pre>