#Include thích hợp cho hàm 'sleep' trong C là gì?


124

Tôi đang sử dụng cuốn sách Lập trình Mục tiêu-C của Big Nerd Ranch, và nó bắt đầu bằng việc chúng tôi viết bằng C trong một vài chương đầu tiên. Trong một trong những chương trình do tôi tạo, tôi sử dụng chức năng ngủ. Trong cuốn sách, nó nói với tôi để đặt #include <stdlib.h>dưới #include <stdio.h>một phần. Điều này được cho là để loại bỏ cảnh báo có nội dung "Khai báo ngầm về hàm 'sleep' không hợp lệ trong C99". Nhưng vì một số lý do sau khi tôi đặt #include <stdlib.h>, cảnh báo không biến mất .. Sự cố này không ngăn chương trình chạy tốt, mà tôi chỉ tò mò về cách #includetôi cần sử dụng!


3
cộng với một người đủ dũng cảm để hỏi câu hỏi đơn giản và giúp tôi.
Đánh dấu Ch

1
Nếu bạn sử dụng bất kỳ IDE thị trưởng nào (NetBeans, IntelliJ IDEA, Eclipse). nhập tên của bất kỳ chức năng nào, sau đó Alt + Enter chức năng đó sẽ tự động nhập thư viện có chức năng đó.
T04435

2
@ T04435: Trong thư viện C không được nhập. Trình biên dịch không cần chúng. Trình liên kết có thể liên kết chúng, nhưng chỉ sau khi trình biên dịch hoàn tất . Trong C, trình biên dịch cần một nguyên mẫu của một hàm để sử dụng một hàm. Nguyên mẫu thường có trong tệp tiêu đề (.h).
alk

Câu trả lời:


163

Trang Sleep man cho biết nó được khai báo trong <unistd.h>.

Tóm tắc:

#include <unistd.h>

unsigned int sleep (không dấu int giây);


1
Tôi không có! Cảm ơn bạn! nó chỉ hơi phiền tôi thôi, vì cuốn sách nói rằng <stdlib.h> sẽ thoát khỏi cảnh báo ... kỳ lạ haha ​​@simonc
trludt 11/02

1
Sẽ tốt hơn nếu sử dụng hàm sleep () hoặc time () để tạo độ trễ?
LandonZeKepitelOfGreytBritn

66

sleep là một hàm phi tiêu chuẩn.

  • Trên UNIX, bạn sẽ bao gồm <unistd.h>.
  • Trên MS-Windows, Sleeplà từ <windows.h>.

Trong mọi trường hợp, hãy kiểm tra tài liệu.


4
wrt tiêu chuẩn C. wrt POSIX, chính là
ivotron

Trên UNIX, Sleep thực sự là usleep và nó mất micro giây (mili giây * 1000) thay vì giây.
Agostino

6
Không sử dụng usleep: "4.3BSD, POSIX.1-2001. POSIX.1-2001 tuyên bố hàm này đã lỗi thời; thay vào đó hãy sử dụng nanosleep (2). POSIX.1-2008 xóa đặc điểm kỹ thuật của usleep ()." linux.die.net/man/3/usleep
Jetski S-type

62

đây là những gì tôi sử dụng cho mã đa nền tảng:

#ifdef _WIN32
#include <Windows.h>
#else
#include <unistd.h>
#endif

int main()
{
  pollingDelay = 100
  //do stuff

  //sleep:
  #ifdef _WIN32
  Sleep(pollingDelay);
  #else
  usleep(pollingDelay*1000);  /* sleep for 100 milliSeconds */
  #endif

  //do stuff again
  return 0;
}

2
giải pháp hay, hữu ích
HCarrasko

15
usleep () đã bị xóa trong POSIX.1-2008. Sử dụng nanosleep (). linux.die.net/man/3/usleep
Jetski loại S

13

sleep()nó nên được

#include <unistd.h>

8

sleep(3)là trong unistd.h, không phải stdlib.h. Nhập man 3 sleepvào dòng lệnh của bạn để xác nhận cho máy của bạn, nhưng tôi cho rằng bạn đang sử dụng máy Mac vì bạn đang học Objective-C và trên máy Mac, bạn cần unistd.h.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.