如何修复此语句可能会通过 [-Werror=implicit-fallthrough=]?

Posted

技术标签:

【中文标题】如何修复此语句可能会通过 [-Werror=implicit-fallthrough=]?【英文标题】:How to fix this statement may fall through [-Werror=implicit-fallthrough=]? 【发布时间】:2018-07-21 07:10:42 【问题描述】:

做什么

this statement may fall through [-Werror=implicit-fallthrough=]

意思是?

我在编译这样的语句时遇到这个错误:

switch(eT)
    
    case SEL_CRIT:
        
            TYPE1* psSel;
            iRetVal = dbseq(enB->m_ps,
                NULL, NULL, &esM, NULL, ESEC);
            while (iRetVal == 0)
            
                if(psEnterprise)
                
                    bool iFound = false;
                    for (i = 0; i< psME->m_pslave[0].m_uc; i++)
                    
                        ENT node1;
                        sEOS = psME>m_pslave[0].m_pslavecnt[i];

                    
                    if (iFound && (psME->m_NOTOVERLOADED == false))
                    
                        return psME;
                    
                
            
            psSel = (M_EN*)pCrit;
            LOG_INFO(FAIL_TO_LOAD, psME->m_ONG, psME->EN);
            int_Enterprise = NULL;
        

int_Enterprise = NULL;

在哪里

int_Enterprise 是一些结构指针。

我该如何解决这个问题?

【问题讨论】:

请给周围的代码。 你现在应该知道如何创建Minimal, Complete, and Verifiable Example了。 在现代 c++ 中,NULL 应避免使用并由nullptr 代替。哦,等等,变量名表明它是一个 int?那么您可能希望将 NULL 替换为 0。并不是说它不会修复警告,但它会使代码更易于阅读和理解。 这是什么编程语言? C 还是 C++? 这是我很长时间没有接触过的大型代码库的一部分,之前是为旧操作系统(如 9 年前)编写的,我决定将其移植到更新的 Ubuntu 18.04。所以我不太确定从那以后发生了什么变化。 【参考方案1】:

case: 末尾没有break;,因此执行将进入下一个case。添加 break 语句以防止如果您想要的话,或者添加 [[fallthrough]] 属性,如果您想要的话。

【讨论】:

谢谢。是的,这正是我所缺少的。

以上是关于如何修复此语句可能会通过 [-Werror=implicit-fallthrough=]?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复此 SELECT 语句中的错误 INTO 子句

如何修复此“忽略 SQL 语句”错误?

GCC 警告选项 -Werror

数据库的企业管理MSDB已经显示单个用户了,却还是不能执行修复语句??

简化/自动化此If语句中的分支

Linux中如何修复GRUB引导故障