You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:45:05