fatal error C1061: compiler limit : blocks nested too deeply 原因以及解决办法
文章目录
- 一.问题描述
- 二.原因
- 三.解决办法
- 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 原因以及解决办法相关推荐
- fatal error: alsa/asoundlib.h: 没有那个文件或目录错误解决办法
在编译ffmpeg4.2代码的时候,出现以下编译错误: libavdevice/alsa_enc.c:40:10: fatal error: alsa/asoundlib.h: 没有那个文件或目录 解 ...
- win10如何将已有python环境变量添加到电脑中 错误 Fatal error in launcher: Unable to create process using pip.exe 解决办法
如图:我的电脑 --> 属性 --> 高级系统设置 --> 环境变量 --> 系统变量 --> path 在path中添加python的文件夹路径以及Scripts路径: ...
- 关于使用pip安装第三方库报出Fatal error in launcher: Unable to create process using...错误的解决办法
一. 存在的原因: 应该是你的终端存在多个pip: 查看多个pip的方式: C:\Users\abc>where pip D:\Program Files\python37\Scripts\pi ...
- LINK : fatal error LNK1104: 无法打开文件“mfc71.lib”的原因又一例
LINK : fatal error LNK1104: 无法打开文件"mfc71.lib"的原因一例 http://blog.csdn.net/mxclxp/article/det ...
- LINK : fatal error LNK1104: 无法打开文件“mfc71.lib”的原因一例
LINK : fatal error LNK1104: 无法打开文件"mfc71.lib"的原因一例 [环境] 日文Windows XP OS 中文Visual Studi ...
- 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 ...
- 【转】error while loading shared libraries: xxx.so.x 错误的原因和解决办法
原博客地址:http://www.cnblogs.com/Anker/p/3209876.html#undefined error while loading shared libraries: xx ...
- [error] id returned 1 exit status原因及解决办法
1. 上次编译运行的shell没有关闭(小黑窗) 2.函数定义在了main()函数里面 例: int main() {...void Function_1(int a,char b,char c){ ...
- error LNK2038: 检测到“RuntimeLibrary”的不匹配项的解决办法
error LNK2038: 检测到"RuntimeLibrary"的不匹配项的解决办法 原因:这是一个编译器错误,通常是由于链接器找不到所需的运行时库而导致的.需要检查编译器和链 ...
最新文章
- 为什么要用这些框架来进行开发,直接new一个对象不香吗?
- 【译】MongoDb vs Mysql—以NodeJs为例
- php,cgi,nginx关系
- 【Flask】项目中使用请求钩子的妙处有那些?
- 1.4 super关键字详解
- WebRTC 音频模块单独编译 --【转载】
- b树范围查找_使用段树查找最大查询范围
- python的编程方式模块化_我的Python笔记·模块化编程(一)
- winapi编程获取文件版本信息的代码_.Net调用WinAPI轻松实现POS小票并口打印
- APIS IQ FMEA 试用版安装包和“破解”(去除60天使用限制)
- AutoCad2012安装与使用
- mp-mtgsig 美团iOS 签名逆向工程分析
- 网络文件传输工具,秒杀各种网络文件传送工具的镭速云
- 游戏史上最伟大的10位制作人(图)
- 为什么打印还要另存为_为什么打印机一打印就会出现另存为
- STM32 TM1650数码管显示与按键识别
- 可怕,任天堂找到了一种新的赚钱方式……​
- EasyExcel实现表格导入导出
- 010Editor破解版png模板失效解决方法
- LoadRunner 12.02 进行录制脚本时提示无Internet访问
热门文章
- K12在线教育发展前景分析
- 软考证书有效期是多久?3年没登记会失效?
- java long 0和0l_long l = 1;对or错、Long l = 1;对or错,最基础的你对了吗?
- 社区团购这条路上,美团、拼多多必有一战?
- 二极管反向恢复时间电脑程控测试系统(智能识别示波器曲线)
- duilib写个三国杀?
- 第四章 资本主义的本质及规律
- comsol学习---声学与振动建模-----1
- Paimei安装及使用 Paimei---指令追踪工具
- ReenactGAN: Learning to Reenact Faces via Boundary Transfer 论文翻译