unistd.h связал трудность при компиляции бизона и программы гибкого провода под vc ++

Я использую бизона и гибкий провод (загруженный через cygwin) с 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 в файле гибкого провода (.l), то эта ошибка исчезнет, но я получаю несколько других ошибок:

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

Как я могу решить эту проблему?

Все эти ошибки происходят в сгенерированном гибким проводом сканере.

Я знаю, что это - потому что unistd.h не существует в окнах. Я должен записать свой собственный unistd.h? Раз так, как записать это для устранения тех ошибок?

24
задан 6 revs, 2 users 100% 6 May 2013 в 11:19
поделиться

3 ответа

isatty используется лексером, чтобы определить, поток - это терминал или канал / файл. Лексер использует эту информацию для изменения своего поведения кэширования (лексер читает большие фрагменты входных данных, если он не является терминалом). Если вы знаете, что ваша программа никогда не будет использоваться в интерактивном виде, вы можете добавить в лексер % option never-interactive . Когда программа запускается с пользовательским вводом, используйте % option interactive . Если желательны оба варианта использования, вы можете либо сгенерировать интерактивный лексер, который снижает производительность при использовании в пакетном режиме, либо предоставить свою собственную функцию isatty .

17
ответ дан 28 November 2019 в 23:15
поделиться

unistd.h - это заголовок UNIX, поэтому он отсутствует в VC ++; лучше всего скомпилировать его с помощью g ++ в Cygwin (или mingw / msys). Вы также можете посмотреть этот вопрос , чтобы получить другие предложения.

2
ответ дан 28 November 2019 в 23:15
поделиться

на всякий случай, Flex поставляется с unistd.h в своих файлах разработки. Я нашел это здесь:

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

короче говоря, просто убедитесь, что ваш компилятор может до него добраться . в моем случае это просто добавление «C: \ GnuWin32 \ include» в дополнительные каталоги включения

9
ответ дан 28 November 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: