C में फ़ंक्शन 'स्लीप' के लिए उचित #include क्या है?


124

मैं बिग नर्ड रेंच बुक ऑब्जेक्टिव-सी प्रोग्रामिंग का उपयोग कर रहा हूं, और यह हमें पहले कुछ अध्यायों में सी में लिखने से शुरू होता है। मेरे द्वारा बनाए गए मेरे एक कार्यक्रम में, मैं नींद समारोह का उपयोग करता हूं। पुस्तक में इसने मुझे भाग के #include <stdlib.h>नीचे रखने के लिए कहा था #include <stdio.h>। यह चेतावनी से छुटकारा पाने के लिए माना जाता है जो कहता है कि "फ़ंक्शन की नींद की अवैध घोषणा C99 में अमान्य है"। लेकिन किसी कारण के बाद मैं लगाता हूं #include <stdlib.h>, चेतावनी दूर नहीं जाती है .. यह समस्या ठीक चलने से कार्यक्रम को रोकती नहीं है, लेकिन मैं बस उत्सुक था जिस पर #includeमुझे उपयोग करने की आवश्यकता थी!


3
प्लस एक सरल प्रश्न पूछने और मेरी मदद करने के लिए पर्याप्त बहादुर होने के लिए।
मार्क च

1
यदि आप किसी मेयर आईडीई (नेटबीन्स, इंटेलीजे आईडीईए, ग्रहण) का उपयोग करते हैं। किसी भी फ़ंक्शन का नाम टाइप करें, फिर Alt + Enter यह उस लाइब्रेरी को ऑटो-आयात करेगा जो उसके पास है।
T04435

2
@ T04435: C पुस्तकालयों में आयात नहीं किया जाता है। संकलक को उनकी आवश्यकता नहीं है। लिंकर उन्हें लिंक कर सकता है, लेकिन कंपाइलर के पूरा होने के बाद ही । सी में कंपाइलर को फंक्शन का उपयोग करने के लिए फंक्शन के प्रोटोटाइप की जरूरत होती है। प्रोटोटाइप आमतौर पर हेडर फाइलों (.h) में आते हैं ।
एल्क

जवाबों:


163

स्लीप मैन पेज कहता है कि यह घोषित है <unistd.h>

सारांश:

#include <unistd.h>

अहस्ताक्षरित int नींद (अहस्ताक्षरित int सेकंड);


1
मेरे पास नहीं था! धन्यवाद! यह मुझे परेशान करने की तरह था, क्योंकि किताब ने कहा कि <stdlib.h> चेतावनी से छुटकारा मिलेगा ... अजीब हाहा @simonc
trludt

1
क्या देरी बनाने के लिए नींद () फ़ंक्शन या समय () का उपयोग करना बेहतर होगा?
लैंडनज़ेकेपिटेलऑफग्रेइटब्रिटेन

66

sleep एक गैर-मानक फ़ंक्शन है।

  • UNIX पर, आप शामिल होंगे <unistd.h>
  • एमएस-विंडोज पर, Sleepबल्कि से है <windows.h>

हर मामले में, दस्तावेज की जाँच करें।


4
सी मानक।
wr

UNIX पर, स्लीप वास्तव में बेकार है और यह सेकंड के बजाय माइक्रोसेकंड (मिलीसेकंड * 1000) लेता है।
अगस्टिनो

6
Usleep का उपयोग न करें: "4.3BSD, POSIX.1-2001। POSIX.1-2001 इस फ़ंक्शन को अप्रचलित घोषित करता है; इसके बजाय nanosleep (2) का उपयोग करें। POSIX.1-2008 usleep के विनिर्देश को हटाता है ()।" linux.die.net/man/3/usleep
एस-टाइप

62

यह वही है जो मैं क्रॉस-प्लेटफ़ॉर्म कोड के लिए उपयोग करता हूं:

#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
अच्छा समाधान, उपयोगी
एचसीएआरआरआरएसए

15
usleep () को POSIX.1-2008 में हटा दिया गया था। नैनोसेलेप () का उपयोग करें। linux.die.net/man/3/usleep
एस-टाइप

13

इसके लिए sleep()होना चाहिए

#include <unistd.h>

8

sleep(3)में है unistd.h, नहीं stdlib.hman 3 sleepअपनी मशीन के लिए पुष्टि करने के लिए अपनी कमांड लाइन पर टाइप करें, लेकिन मुझे लगता है कि आप एक मैक पर हैं क्योंकि आप ऑब्जेक्टिव-सी सीख रहे हैं, और मैक पर आपको जरूरत है unistd.h

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.