文章目录

  • 一.问题描述
  • 二.原因
  • 三.解决办法
    • 1.将深层嵌套的代码分解为从原始上下文调用的函数
    • 2.面向对象的方法
    • 3.利用switch替换
  • 四.参考文献

写在前面的话:
  续接上次的ASN.1继续更新,这是项目文件在编译时候遇到的错误,现在总结一下

一.问题描述

在xx.cpp的项目文件中,需要在原来的else if架构中再添加一行该结构来匹配字符串,但是在编译时候出现fatal error C1061错误。

二.原因

上网查询后得知是C和C++编译器最大仅支持128层的代码块嵌套,微软Visual C++给出的解释如下1

Nesting of code blocks exceeds the limit of 128 nesting levels. This is a hard limit in the compiler for both C and C++, in both the 32-bit and 64-bit tool set. The count of nesting levels can be increased by anything that creates a scope or block. For example, namespaces, using directives, preprocessor expansions, template expansion, exception handling, loop constructs, and else-if clauses can all increase the nesting level seen by the compiler.

三.解决办法

不同代码导致的问题解决办法不尽相同。但是最根本的是要重构代码,减少代码嵌套级别以提高代码质量并简化维护。下面是几种常用的解决办法:

1.将深层嵌套的代码分解为从原始上下文调用的函数

Eg:
your code

void foo()
{if (cond1){if ( cond2){if (cond3)}}else{;}
}

alternative code

RESULT funcForCond1( ARGS)
{if ( cond2){funcForCond2();}
}
RESULT funcForCond2( ARGS)
{if ( cond3){//...}
}
void foo()
{if( cond1)funcForCond1()else{;}
}

这种方法有点换汤不换药的意思,没有从代码的结构上去解决问题。如果遇到比较复杂的问题,这么改会很头大。下面说一种易于维护、代码结构良好的方法

2.面向对象的方法

利用面向对象的方法限制或消除块中循环或链接的else-if子句的数量。不同的情况处理方式不一样,现在说一下由于else if导致出现错误的情况。在这里,一般用C++自带的哈希映射去替代else if中的数据流匹配问题。在这里剖一个stack overflow的链接2,大家参考一下.

3.利用switch替换

switch的case标签不会被编译器识别当作块嵌套,可以替换else if导致的问题。

四.参考文献

  • [1] 微软 Docs/VisualC++ :Fatal Error C1061
  • [2] stack overflow :Blocks nested too deeply

fatal error C1061: compiler limit : blocks nested too deeply 原因以及解决办法相关推荐

  1. fatal error: alsa/asoundlib.h: 没有那个文件或目录错误解决办法

    在编译ffmpeg4.2代码的时候,出现以下编译错误: libavdevice/alsa_enc.c:40:10: fatal error: alsa/asoundlib.h: 没有那个文件或目录 解 ...

  2. win10如何将已有python环境变量添加到电脑中 错误 Fatal error in launcher: Unable to create process using pip.exe 解决办法

    如图:我的电脑 --> 属性 --> 高级系统设置 --> 环境变量 --> 系统变量 --> path 在path中添加python的文件夹路径以及Scripts路径: ...

  3. 关于使用pip安装第三方库报出Fatal error in launcher: Unable to create process using...错误的解决办法

    一. 存在的原因: 应该是你的终端存在多个pip: 查看多个pip的方式: C:\Users\abc>where pip D:\Program Files\python37\Scripts\pi ...

  4. LINK : fatal error LNK1104: 无法打开文件“mfc71.lib”的原因又一例

    LINK : fatal error LNK1104: 无法打开文件"mfc71.lib"的原因一例 http://blog.csdn.net/mxclxp/article/det ...

  5. LINK : fatal error LNK1104: 无法打开文件“mfc71.lib”的原因一例

    LINK : fatal error LNK1104: 无法打开文件"mfc71.lib"的原因一例 [环境]   日文Windows XP OS   中文Visual Studi ...

  6. springboot项目报错:ERROR 9112 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] 的解决办法

    启动springboot项目,访问页面后报错 报错信息如下: [nio-8087-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.ser ...

  7. 【转】error while loading shared libraries: xxx.so.x 错误的原因和解决办法

    原博客地址:http://www.cnblogs.com/Anker/p/3209876.html#undefined error while loading shared libraries: xx ...

  8. [error] id returned 1 exit status原因及解决办法

    1.  上次编译运行的shell没有关闭(小黑窗) 2.函数定义在了main()函数里面 例: int main() {...void Function_1(int a,char b,char c){ ...

  9. error LNK2038: 检测到“RuntimeLibrary”的不匹配项的解决办法

    error LNK2038: 检测到"RuntimeLibrary"的不匹配项的解决办法 原因:这是一个编译器错误,通常是由于链接器找不到所需的运行时库而导致的.需要检查编译器和链 ...

最新文章

  1. 为什么要用这些框架来进行开发,直接new一个对象不香吗?
  2. 【译】MongoDb vs Mysql—以NodeJs为例
  3. php,cgi,nginx关系
  4. 【Flask】项目中使用请求钩子的妙处有那些?
  5. 1.4 super关键字详解
  6. WebRTC 音频模块单独编译 --【转载】
  7. b树范围查找_使用段树查找最大查询范围
  8. python的编程方式模块化_我的Python笔记·模块化编程(一)
  9. winapi编程获取文件版本信息的代码_.Net调用WinAPI轻松实现POS小票并口打印
  10. APIS IQ FMEA 试用版安装包和“破解”(去除60天使用限制)
  11. AutoCad2012安装与使用
  12. mp-mtgsig 美团iOS 签名逆向工程分析
  13. 网络文件传输工具,秒杀各种网络文件传送工具的镭速云
  14. 游戏史上最伟大的10位制作人(图)
  15. 为什么打印还要另存为_为什么打印机一打印就会出现另存为
  16. STM32 TM1650数码管显示与按键识别
  17. 可怕,任天堂找到了一种新的赚钱方式……​
  18. EasyExcel实现表格导入导出
  19. 010Editor破解版png模板失效解决方法
  20. LoadRunner 12.02 进行录制脚本时提示无Internet访问

热门文章

  1. K12在线教育发展前景分析
  2. 软考证书有效期是多久?3年没登记会失效?
  3. java long 0和0l_long l = 1;对or错、Long l = 1;对or错,最基础的你对了吗?
  4. 社区团购这条路上,美团、拼多多必有一战?
  5. 二极管反向恢复时间电脑程控测试系统(智能识别示波器曲线)
  6. duilib写个三国杀?
  7. 第四章 资本主义的本质及规律
  8. comsol学习---声学与振动建模-----1
  9. Paimei安装及使用 Paimei---指令追踪工具
  10. ReenactGAN: Learning to Reenact Faces via Boundary Transfer   论文翻译