C语言编译警告:控制流到达非void函数末尾的解决方法
解决“control reaches end of non-void function”警告
这个警告的原因很明确:你声明的函数handleNormalState返回类型是enum Statetype,但函数体内所有分支都没有返回任何值,编译器无法确定函数执行完毕后要返回什么,因此抛出该警告。
你可以根据实际需求选择以下两种解决方式:
方式一:改为无返回值函数
如果这个函数不需要返回任何值,直接将返回类型修改为void即可:
void handleNormalState(int c) { if (c == '/'){ state = slash; } else if (c == '"') { state = charstr; putchar(c); } else if (c == '\'') { state = charcon; putchar(c); } else { state = normal; putchar(c); } }
方式二:添加返回语句
如果需要函数返回更新后的状态值,在每个分支末尾添加return语句返回对应的枚举值即可:
enum Statetype handleNormalState(int c) { if (c == '/'){ state = slash; return slash; } else if (c == '"') { state = charstr; putchar(c); return charstr; } else if (c == '\'') { state = charcon; putchar(c); return charcon; } else { state = normal; putchar(c); return normal; } }
注:如果state是全局/外部变量,且后续逻辑不依赖它的赋值,也可以直接返回枚举值,省去对state的赋值操作,代码会更简洁。
内容的提问来源于stack exchange,提问作者Rose Ben Ann
相关产品推荐
相关产品推荐

