C++转到(而不是继续)语法上的奇怪之处
C++ goto (rather than continue) syntactic oddity
我有以下代码:
do
{
doStuffP1();
if (test)
{ goto skip_increment;
}
dostuffP2();
skip_increment:
// 1; // Only works if I remove the comment at line start.
} while (loop);
它没有编译(VC++2010)与此错误:
file_system_helpers.cpp(109) : error C2143: syntax error : missing ';' before '}'
如果我将其更改为:
skip_increment:
1;
它编译(并工作)。
这真的是C++语法的限制吗?
我认为第一个代码片段中应该缺少"1;"?
看看这里的语法:http://www.lysator.liu.se/c/ANSI-C-grammar-y.html
这只将标签定义为"标签语句"。也就是说,块体可以在其内容序列中的任何位置包含label: <statement>
,但标签后面的语句不是可选的。因此,这将使skip_increment: }
无效。
(好吧,你使用的是C++,而不是C;但我怀疑在定义C++语言时,是否有人非常关心对goto的额外使用。)
相关文章:
- 代码的效率. 转到和函数调用
- C++:我的开关盒循环转到第一种情况
- 转到基于范围的 for 循环中的下一个迭代器
- 如何在跳过所有内部实现的同时跳转到 GDB 中 std::function 中的函数?
- 更改 git 分支名称后,在项目的 Visual Studio 代码中丢失智能感知(建议,转到定义C++
- 我正在尝试为字符打印一些相应的值,但条件总是转到其他位置
- 需要从存档中读取一行文本.txt直到找到"hhh",然后转到下一行
- 如果类在堆上,函数是转到堆还是堆栈?
- 跳转到通过输入坐标定义的控制台屏幕位置
- 跳转到函数从某些代码部分开始
- 可以在没有构建代码的情况下转到定义吗?
- 跳转到if(false)块有问题吗
- 当我使用c++生成器时,如何在输入完成后自动跳转到下一个"TEdit"
- Cython:如何在不需要 GIL 的情况下从 numpy 内存视图转到矢量[对[双,双]]?
- 调试 - 单步执行 (F11) 不会直接转到函数
- 如何转到 fstream 中文件的开头?
- 是否可以在不指定类型的情况下从 istringstream 转到向量?
- 如何将指向对象的指针转到常量取消引用的对象
- 我如何使我的循环转到char*阵列的尽头,并将每个城市都放在链接的列表中(城市被划分为白色的空间)
- C++转到(而不是继续)语法上的奇怪之处