visual c++ unistd.h संबंधित कठिनाई जब बीसीएन और वीसी++ के तहत फ्लेक्स कार्यक्रम संकलित




visual-c++ cygwin (7)

विकल्प - wincompate के साथ win_flex.exe का उपयोग करें और आपको अपने लेक्स फ़ाइल को हैक करने की आवश्यकता नहीं है

मैं बीसीन और फ्लेक्स (साइगविन द्वारा डाउनलोड किया गया) vc ++ के साथ का उपयोग कर रहा हूं जब मैं प्रोग्राम संकलित करता हूं मुझे एक त्रुटि मिली:

...: fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory

फ्लेक्स-जनरेटेड फ़ाइल में संबंधित कोड है:

#ifndef YY_NO_UNISTD_H
/* Special case for "unistd.h", since it is non-ANSI. We include it way
 * down here because we want the user's section 1 to have been scanned first.
 * The user has a chance to override it with an option.
 */
/* %if-c-only */
#include <unistd.h>
/* %endif */
/* %if-c++-only */
/* %endif */
#endif

अगर मैं फ्लेक्स फ़ाइल (। एल) में YY_NO_UNISTD_H को परिभाषित करता हूं तो यह त्रुटि गायब हो जाएगी, लेकिन मुझे कई अन्य त्रुटियां मिलती हैं:

...: error C2447: '{' : missing function header (old-style formal list?)
...: warning C4018: '<' : signed/unsigned mismatch
...: error C3861: 'isatty': identifier not found

मैं इस समस्या को कैसे ठीक करुं?

ये सभी त्रुटियां फ्लेक्स-जनरेट स्कैनर में होती हैं।

मुझे पता है कि ऐसा इसलिए है क्योंकि unistd.h खिड़कियों में मौजूद नहीं है। क्या मुझे अपना स्वयं का unistd.h लिखना है? यदि हां, तो उन त्रुटियों को खत्म करने के लिए इसे कैसे लिखना है?


मैं बहुत देर हो चुकी हूं, लेकिन फिर भी मैं अपने निष्कर्षों को किसी को अभी भी जवाब की तलाश में रखने के लिए बचाएगा। मेरे मामले में स्थान पर एक खाली unistd.h फ़ाइल होने पर जहां कंपाइलर हेडर के लिए मेरे लिए काम करता है


.l पर निर्भरता को दूर करने के लिए आपके .l फाइल में %option nounistd उपयोग करें।


बस किसी की अभी भी इस समस्या के मामले में, फ्लेक्स unistd.h के साथ अपने devel फ़ाइलों में आता है। मुझे यह यहां मिला:

http://sourceforge.net/tracker/index.php?func=detail&aid=931222&group_id=23617&atid=379173

इसे कम करने के लिए, बस सुनिश्चित करें कि आपका कंपाइलर इसे पहुंच सकता है। मेरे मामले में यह सिर्फ "सी: \ GnuWin32 \ include" अतिरिक्त शामिल निर्देशिका को जोड़ रहा है


unistd.h एक यूनिक्स हेडर है, इसलिए यह वीसी ++ में मौजूद नहीं है; आपका सबसे अच्छा शर्त शायद साइगविन (या मिंगव / एमएसआईएस) में जी ++ का उपयोग करके इसे संकलित करना है। आप अन्य सुझावों के लिए इस प्रश्न को भी देख सकते हैं।


isatty का इस्तेमाल isatty द्वारा यह निर्धारित करने के लिए किया जाता है कि इनपुट स्ट्रीम एक टर्मिनल या पाइप / फाइल है या नहीं। लेक्ज़र इस जानकारी का उपयोग उसके कैशिंग व्यवहार को बदलने के लिए करता है (लेसर इनपुट का बड़ा भाग पढ़ता है, जब वह टर्मिनल नहीं है)। यदि आप जानते हैं कि आपके प्रोग्राम का उपयोग किसी इंटरैक्टिव प्रकार में कभी नहीं किया जाएगा, तो आप %option never-interactive जोड़ सकते हैं। जब उपयोगकर्ता इनपुट के साथ कार्यक्रम चलाया जाता है, तो %option interactive उपयोग करें। जब दोनों का इस्तेमाल होता है, तो आप या तो इंटरैक्टिव लेक्जर बना सकते हैं, जो बैच मोड में उपयोग किए जाने के दौरान प्रदर्शन हानि देता है, या अपना खुद का isatty फ़ंक्शन प्रदान करता है।


अच्छी तरह से यह पोस्ट पुरानी है लेकिन मुझे एक ही समस्या का सामना करना पड़ रहा है और यहाँ कुछ ऐसा होना चाहिए जो काम करना चाहिए। WinFlexBison