写在前面的话:
续接上次的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导致的问题。
四.参考文献
来源:CSDN
作者:ryhybx
链接:https://blog.csdn.net/ryhybx/article/details/103927600