यह सरल ग फ़ाइल पर c99:unistd.h और लिनक्स
#include <unistd.h>
void test() {
char string[40];
gethostname(string,40);
}
... जब सामान्य रूप से संकलित, ठीक काम करता है:
$ cc -Wall -c -o tmp.o tmp.c
$
... लेकिन जब C99 मोड में संकलित, एक चेतावनी देता है:
$ cc -Wall -std=c99 -c -o tmp.o tmp.c
tmp.c: In function `test':
tmp.c:5: warning: implicit declaration of function `gethostname'
$
परिणामस्वरूप .o फ़ाइल ठीक है, और लिंक काम करता है। मैं सिर्फ चेतावनी से छुटकारा पाना चाहता हूं। मैं इसे अपने स्वयं के .h फ़ाइल में घोषणाओं को डालकर, एक हैकी तरीके से प्राप्त कर सकता हूं।
सी 99 के बारे में क्या है जिसका अर्थ है unistd.h में घोषणाएं शामिल नहीं हैं? सी 99 की अच्छीता को छोड़ दिए बिना, इसे दूर किया जा सकता है?
मुझे अन्य मानक libs के लिए एक ही समस्या दिखाई देती है।
+1 बहुत अच्छी तरह से इलाज। उत्तर के लिए –
+1। -10 परिभाषित करें '# परिभाषित करें _BSD_SOURCE'। कृपया निर्माण श्रृंखला में '#define _XOPEN_SOURCE 500' या बेहतर अभी तक उपयोग करें:' cc -D_XOPEN_SOURCE = 500 ... '। खैर, अगर किसी भी तरह की पोर्टेबिलिटी वांछित है। – Dummy00001
लूथर के जवाब के साथ - मेरे Red Hat सिस्टम पर 'मैन gethostname' फ़ीचर टेस्ट मैक्रो आवश्यकताओं का कोई उल्लेख नहीं करता है। किसी को भी कोई विचार है क्यों? – slim