c - unistd.h and c99 on Linux -


यह सरल। सी फ़ाइल:

  #include & lt; unistd.h & gt; शून्य परीक्षण () {चार स्ट्रिंग [40]; gethostname (स्ट्रिंग, 40); }  

... सामान्य रूप से संकलित होने पर, ठीक काम करता है:

  $ cc -Wall -c -o tmp.o tmp.c $  

... परन्तु C99 मोड में संकलित होने पर, एक चेतावनी दी जाती है:

  $ cc -Wall -std = c99 -c -o tmp.o tmp.c Tmp.c: फ़ंक्शन `टेस्ट ': tmp.c: 5: चेतावनी: फ़ंक्शन` gethostname' $  

के परिणामस्वरूप घोषणा। परिणामी। ओ फ़ाइल ठीक है, और लिंक जोड़ना है मैं सिर्फ चेतावनी से छुटकारा चाहूंगा मैं इसे अपने ही .h फाइल में घोषणाओं के जरिए इसे प्राप्त कर सकता हूं।

सीएम 99 के बारे में क्या है जिसका मतलब है कि unistd.h में घोषणाएं शामिल नहीं हुई हैं? सीएएम के निकोलस को छोड़ने के बाद क्या यह दूर किया जा सकता है?

मुझे अन्य मानक लिब्स के लिए एक ही समस्या दिखाई देती है।

gethostname ()

से आदमी gethostname

:

फ़ीचर टेस्ट मैक्रो के लिए आवश्यकताएँ glibc (देखें feature_test_macros (7)):

  gethostname (): _BSD_SOURCE || _XOPEN_SOURCE & gt; = 500 sethostname (): _BSD_SOURCE || (_XOPEN_SOURCE & amp; _XOPEN_SOURCE & lt; 500)  

ऐसा:

  #define _BSD_SOURCE #include & lt; unistd.h & gt; शून्य परीक्षण () {चार स्ट्रिंग [40]; gethostname (स्ट्रिंग, 40); }  

धूर्त विवरण:

यदि आप -std-c99 विकल्प निर्दिष्ट नहीं करते हैं, तो features.h (जो कि unistd.h द्वारा निहित है) _BSD_SOURCE को सेट करने के लिए डिफ़ॉल्ट रूप से gethostname () शामिल हो जाता है हालांकि, -std = c99 निर्दिष्ट करने से कंपाइलर स्वतः __ STRICT_ANSI __ को परिभाषित करता है, जिसके बदले में features.h परिभाषित नहीं करने के लिए _BSD_SOURCE , जब तक कि आप इसे अपनी स्वयं की फीचर मैक्रो परिभाषा (ऊपर के रूप में) से बाध्य नहीं करते।


Comments

Popular posts from this blog

c# - sqlDecimal to decimal clr stored procedure Unable to cast object of type 'System.Data.SqlTypes.SqlDecimal' to type 'System.IConvertible' -

Calling GetGUIThreadInfo from Outlook VBA -

Obfuscating Python code? -