ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

a declaration cannot have a label

2022-07-12 19:37:29  阅读:168  来源: 互联网

标签:case error label switch cannot declaration scope define


目录

1.问题

image

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.解决

  1. 对于图中的错误,只需要将变更定义提前即可。

  2. 对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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有