Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基于范围的for循环中报告了奇怪的语法错误_C++_Visual C++_C++11_Visual C++ 2013 - Fatal编程技术网

C++ 基于范围的for循环中报告了奇怪的语法错误

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 : '}' 在包含单个分号的行上。我是否发现了编译器错误?还是

在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 : '}'

在包含单个分号的行上。我是否发现了编译器错误?还是基于循环的范围微妙到我无法理解的程度?

为了总结对未来任何人的评论:

这显然是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自动代码格式化程序似乎存在缩进问题。小麻烦。