C++ 基于范围的for循环中报告了奇怪的语法错误
在Visual Studio 2013中,我在一个全新的空命令行解决方案中编写了以下内容:C++ 基于范围的for循环中报告了奇怪的语法错误,c++,visual-c++,c++11,visual-c++-2013,C++,Visual C++,C++11,Visual C++ 2013,在Visual Studio 2013中,我在一个全新的空命令行解决方案中编写了以下内容: int main(int argc, char* argv[]) { int xs[1]; for (auto x : xs) do ; while (0); return 0; } 编译时,会出现以下错误: error C2059: syntax error : '}' 在包含单个分号的行上。我是否发现了编译器错误?还是
int main(int argc, char* argv[])
{
int xs[1];
for (auto x : xs)
do
;
while (0);
return 0;
}
编译时,会出现以下错误:
error C2059: syntax error : '}'
在包含单个分号的行上。我是否发现了编译器错误?还是基于循环的范围微妙到我无法理解的程度?为了总结对未来任何人的评论: 这显然是Visual Studio 2012和2013中的一个编译器错误。VisualStudio给出的错误消息显然是伪造的,其他编译器的工作方式与预期一致 对我来说,最简单的解决方法就是在整个do while循环周围放上括号,如下所示:
int main(int argc, char* argv[])
{
int xs[1];
for (auto x : xs)
{
do
;
while (0);
}
return 0;
}
谢谢大家的帮助。编译时发出叮当声,所以我要说是bug。您的代码不是读作(auto x:xs){do;}while(0)代码>?用g++4.8编译。@billz我很确定它被解析为
for(auto x:xs){do;while(0);}
,否则它应该是一个错误,因为do
本身不是有效的关键字。他在do中有一个空语句。。。而
.billz-我希望如此,因为您的代码在我的编译器中给出了相同的错误。但是如果是这样的话,那一定是个bug,因为do循环中必须有一段时间,整个循环应该被解析为一条语句..FTR,这在Visual Studio 2015中是固定的,但我在Visual Studio 2015中仍然存在这个问题(我刚刚更新为Update 2,它仍然存在)@kovarex,我无法在VS2015社区更新2中确认这个bug。它编译初始代码样本时没有问题。但VS2015自动代码格式化程序似乎存在缩进问题。小麻烦。