2013-02-11 26 views
68

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

+1

cộng với một vì đã đủ can đảm để hỏi các câu hỏi đơn giản và giúp tôi ra ngoài. –

+1

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

Trả lời

88

Giấc ngủ man page cho biết nó được khai báo trong <unistd.h>. Bạn đã bao gồm điều này trong chương trình của bạn?

+0

Tôi đã không! Cảm ơn bạn! nó chỉ là loại làm phiền tôi, bởi vì cuốn sách nói rằng các sẽ được thoát khỏi cảnh báo ... lạ haha ​​@simonc – trludt

+0

nó sẽ là tốt hơn để sử dụng sleep() chức năng hoặc thời gian() để tạo ra một sự chậm trễ? – LandonZeKepitelOfGreytBritn

36

sleep là chức năng không chuẩn.

  • Trên UNIX, bạn phải bao gồm <unistd.h>.
  • Trên MS-Windows, Sleep thay vì từ <windows.h>.

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

+1

w.r.t. tiêu chuẩn C. w.r.t. POSIX, nó là – ivotron

+0

Trên UNIX, giấc ngủ thực sự là chúng ta ngủ và phải mất micro giây (mili giây * 1000) thay vì giây. – Agostino

4

sleep(3) nằm trong số unistd.h, không phải stdlib.h. Nhập man 3 sleep trên dòng lệnh của bạn để xác nhận cho máy của bạn, nhưng tôi đoán bạn đang 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.

10

Đối sleep() nó phải được

#include <unistd.h> 
32

đây là những gì tôi sử dụng cho một mã cross-platform:

#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; 
} 
+0

giải pháp tốt đẹp, hữu ích – HCarrasko

Các vấn đề liên quan