gpt4 book ai didi

c - GCC 和 Flex/Bison 没有效果警告的声明

转载 作者:行者123 更新时间:2023-12-04 10:49:59 28 4
gpt4 key购买 nike

当使用 gcc 和 -Wall 选项编译我的项目时,我收到一条关于在我的 flex 文件不存在的最后一行中无效的语句的警告:

警告:

gcc -Wall -O0 -ggdb3 -DNOSUDO -DJOBC -DDEBUG -c lex.yy.c
tokenizer.l: In function ‘yylex’:
tokenizer.l:179: warning: statement with no effect

外壳命令:

$ wc -l tokenizer.l
178 tokenizer.l

lex 文件的最后一部分:

; {
return SEMI;
}

有人知道为什么我会收到此警告吗?

如果我抑制所有#line 指令,错误是:

lex.yy.c: In function ‘yylex’:
lex.yy.c:1021: warning: statement with no effect

它指的是 ECHO 行:

case 30:
YY_RULE_SETUP
ECHO;
YY_BREAK
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(inQuote):
case YY_STATE_EOF(inWord):
yyterminate();

最佳答案

通常,您会从任何包含无条件“返回”的 lex 规则中得到该错误,因为 flex 最终生成的代码看起来像(在宏扩展之后):

case xxx:
return SEMI;
break;

问题是无法到达“中断”。它需要存在以防万一您的规则没有返回(因此代码不会落入下一个标记的代码,而是继续识别下一个标记。)Flex 不够智能,无法实际解析您的规则代码并进行流分析以确定何时不需要中断,因此它总是将其放在那里。一般来说,在 flex(或 bison)的输出上使用 -Wall 会给你很多这样的警告......

关于c - GCC 和 Flex/Bison 没有效果警告的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1649677/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com