首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在vc++下编写bison & flex程序时的unistd.h相关困难

在vc++下编写bison & flex程序时的unistd.h相关困难
EN

Stack Overflow用户
提问于 2010-05-08 16:30:45
回答 8查看 31K关注 0票数 24

我使用的是bison & flex (通过cygwin下载)和vc++。当我编译这个程序时,我得到了一个错误:

代码语言:javascript
复制
...: fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory

flex生成的文件中对应的代码是:

代码语言:javascript
复制
#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

如果我在flex文件(.l)中定义了YY_NO_UNISTD_H,这个错误就会消失,但我会得到其他几个错误:

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

我如何解决这个问题?

所有这些错误都发生在flex生成的扫描程序中。

我知道这是因为在windows中不存在。我必须编写自己的unistd.h吗?如果是这样,如何编写它来消除这些错误?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-05-14 16:41:46

词法分析器使用isatty来确定输入流是终端还是管道/文件。词法分析器使用这些信息来改变其缓存行为(当输入不是终端时,词法分析器读取大块的输入)。如果您知道您的程序永远不会用于交互式类型,那么可以将%option never-interactive添加到您的词法分析器中。当使用用户输入运行程序时,请使用%option interactive。如果需要这两种用途,您可以生成一个交互式词法分析器(在批处理模式下使用时会造成性能损失),或者提供您自己的isatty函数。

票数 17
EN

Stack Overflow用户

发布于 2011-10-28 22:20:27

.l文件中使用%option nounistd来消除对unistd.h的依赖。

票数 16
EN

Stack Overflow用户

发布于 2016-09-10 14:46:43

使用带有--wincompat选项的win_flex.exe,你不需要修改你的lex文件

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2793413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档