使用goto跳转到内部或兄弟的范围
是否允许跳转到内部范围或兄弟范围内的标签?如果是这样,是否允许使用在该范围中声明的变量?
考虑这个代码: int cond(void); void use(int); void foo() { { int y = 2; label: use(y); } { int z = 3; use(z); /* jump to sibling scope: */ if(cond()) goto label; } /* jump to inner scope: */ if(cond()) goto label; } 这些gotos合法吗? 如果是这样,当我跳到标签并保留分配给它的最后一个值时,是否保证存在(2)? 或者是允许编译器假定在超出范围之后不会使用y,这意味着单个内存位置可以用于y和z? 如果这段代码的行为是未定义的,那么如何让GCC发出警告呢? 解决方法
从C99标准(强调我的):
结论 > y不是可变的类型,所以根据标准,跳转是合法的.
在C中,跳转不合法,C不允许跳过y的初始化. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c# – LINQ to Entities不识别方法’System.String StringC
- 使用Drawable资源--在xml中定义
- ios – 使用资源包发布cocoapod
- ruby-on-rails – 为rails应用程序创建Rdoc
- Result(ActionResult、JsonResult、JavaScriptResult等)
- react-router 与react-reduct 配合使用时,页面不刷新问题
- 核心数据 – 删除Swift 3中核心数据实体中的所有数据
- as 3.0 如何浏览文件,实现文件上传和下载功能。
- 在SQLITE中是否有UID数据类型,如果是,那么如何为其生成值
- NandFlash读写过程