【发布时间】:2019-11-18 00:10:55
【问题描述】:
我一直在关注来自 Levine 的 Flex & Bison 一书,我看到了以下代码:
main(argc, argv)
int argc;
char **argv;
{
if(argc > 1) {
if(!(yyin = fopen(argv[1], "r"))) {
perror(argv[1]);
return (1);
}
}
yylex();
这部分我觉得有点难理解,比如第一行:
char **argv;
据我所知,它应该与这部分有关:
if(!(yyin = fopen(argv[1], "r")))
所以我可以解释它正在读取输入操作,这是因为“r”,而 argv[1] 指的是控制台输入的一行。是这样吗?我不知道为什么作者使用指向 argv 的双指针。我想当没有有效输入时,它会使用 perror() 打印一个描述性错误,但在这种情况下会发生这种情况吗?
任何解释此代码的帮助都非常有价值。
谢谢
【问题讨论】:
-
您的书显然是一本仍然使用原始 C 语言版本 K&R C 的旧书。当前的、现代的 C/C++ 将 main 声明为
int main(int argc, char *argv[]),因此您可能想四处寻找一本更新的书,以补充这本书。 -
您的问题与bison 或flex-lexer 完全无关。这只是关于
main()。