C99报错:函数内条件始终为真 本地flag变量实现单次执行逻辑出错
你收到报错的核心原因是flag变量的作用域和初始化逻辑错误:你将bool flag=true定义在while循环内部,每次循环迭代时都会重新创建该变量并赋值为true,if(flag)的判断条件永远为真,你在分支内写的flag=false无法影响下一次循环的判断,编译器检测到这个逻辑漏洞就抛出了对应提示。
你可以根据需求选择以下两种方案解决:
方案一:将
flag变量移到while循环外部定义,仅在函数启动时初始化一次
示例代码:void showMainMenu(bool *bool_drawMainMenu, TTF_Font *font1, TTF_Font *font2){ bool flag=true; // 移到循环外部 while(*bool_drawMainMenu){ if(flag){ flag=false; renderMenu(font1,text_Surface,text_Texture,renderer,mainMenu,3); SDL_Rect where={720/2,150}; } // 其余循环逻辑 } //...该方案适合每次调用
showMainMenu函数时,都需要让单次调用内的那段只执行一次的代码重新运行一次的场景。方案二:给循环内部的
flag变量添加static修饰符,C语言中静态局部变量只会在第一次执行到定义语句时初始化一次,后续循环迭代会保留上一次修改后的值
示例代码:void showMainMenu(bool *bool_drawMainMenu, TTF_Font *font1, TTF_Font *font2){ while(*bool_drawMainMenu){ static bool flag=true; // 添加static修饰 if(flag){ flag=false; renderMenu(font1,text_Surface,text_Texture,renderer,mainMenu,3); SDL_Rect where={720/2,150}; } // 其余循环逻辑 } //...注意:该方案下
flag的值会在多次函数调用之间保留,如果你需要每次调用函数时那段代码都能重新执行一次,不要使用该方案。
内容的提问来源于stack exchange,提问作者nebulator0
相关产品推荐
相关产品推荐

