标签:case error label switch cannot declaration scope define
目录
1.问题
2.分析
经过一番查找,发现是编译器的自己解释的局限性所致,会产生误分析。
与之类似的常见现象,还有在使用switch时在case 后面申请变量会出现 error: a declaration cannot have a label 的提示。
从网上找到的答案如下:
Case statements are only ‘labels’. This means the compiler will interpret this as a jump directly to the label.The problem here is one of scope. Your curly brackets define the scope as everything inside the ‘switch’ statement. This means that you are left with a scope where a jump will be performed further into the code skipping the initialization. The correct way to handle this is to define a scope specific to that case statement and define your variable within it.
真是Kiss compiler's ass, make it happy!~
3.解决
-
对于图中的错误,只需要将变更定义提前即可。
-
对SWITCH-CASE语句,在CASE后面加括号就行,即
switch (c)
case 1:
{
int temp;
if(xxx) {
xxx;
}
}
4.应对
在使用GCC时,要将所有的warning转为error即可快速找出,即 -Wall,-Werror
在使用ARMCC时,就要每改动一个文件,就编译一次,确保保 0 warning , 0 error
。
标签:case,error,label,switch,cannot,declaration,scope,define
来源: https://www.cnblogs.com/hanyli/p/16471344.html
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。