C++ 叮当声10&;基于范围的OpenMP错误(文档说应该可以)
我正在c++17&OpenMP项目上测试clang 10.0,在基于范围的for上使用C++ 叮当声10&;基于范围的OpenMP错误(文档说应该可以),c++,c++17,openmp,clang++,C++,C++17,Openmp,Clang++,我正在c++17&OpenMP项目上测试clang 10.0,在基于范围的for上使用#pragma omp parallel for时出现错误 clang 10的发行说明在本节中非常清楚地说: 增加了对基于范围的循环的支持 当我使用clang++-10-fopenmp-std=c++17编译MWE时(请参阅联机编译器): #包括 #包括 int main(int argc,字符**argv){ std::载体ii{0,11,22,33,44,55,66}; #pragma-omp并行 用于
#pragma omp parallel for
时出现错误
clang 10的发行说明在本节中非常清楚地说:
- 增加了对基于范围的循环的支持
clang++-10-fopenmp-std=c++17编译MWE时(请参阅联机编译器):
#包括
#包括
int main(int argc,字符**argv){
std::载体ii{0,11,22,33,44,55,66};
#pragma-omp并行
用于(内部和一级:二级){
OpenMP 5.0中添加了对基于范围的for循环的支持,正如您链接到的中所述,您需要显式使用-fopenmp version=50
选项来激活对它的支持:
在叮当声中支持OpenMP
使用-fopenmp version=50
选项激活对OpenMP 5.0的支持
因此,如果我们将编译命令扩展到clang++-10-fopenmp-fopenmp version=50-std=c++17
,OMP pragma将接受它后面基于范围的for循环
.OpenMP 5.0中添加了对基于范围的for循环的支持,并且,正如您链接到的中所述,您需要明确使用-fopenmp version=50
选项来激活对它的支持:
在叮当声中支持OpenMP
使用-fopenmp version=50
选项激活对OpenMP 5.0的支持
因此,如果我们将编译命令扩展到clang++-10-fopenmp-fopenmp version=50-std=c++17
,OMP pragma将接受它后面基于范围的for循环
.看起来您没有使用OpenMP 5.0(即使您使用的是支持其新功能的clang版本)。您是否尝试过明确选择OpenMP 5.0(其中添加了对基于范围的for循环的支持)?clang++-10-fopenmp-fopenmp version=50-std=c++17
@dfri-Yup,有效:看起来您没有使用OpenMP 5.0(即使您使用的是支持其新功能的clang版本)。您是否尝试过显式选择OpenMP 5.0(其中添加了对基于范围的for循环的支持)?clang++-10-fopenmp-fopenmp version=50-std=c++17
@dfri-Yup,有效:非常感谢。我习惯于不需要OpenMP版本规范的gcc。AFAIK正式支持OpenMP 4.5,但无错误地采用基于范围的并行循环。非常感谢。我习惯于不需要OpenMP版本规范的gcc。aFAIK it正式支持OpenMP 4.5,但采用基于范围的并行循环,没有错误。
#include<vector>
#include<iostream>
int main(int argc, char** argv){
std::vector<int> ii{0,11,22,33,44,55,66};
#pragma omp parallel for
for(int& i: ii){
std::cerr<<i<<std::endl;
}
}
<source>:6:5: error: statement after '#pragma omp parallel for' must be a for loop
for(int& i: ii){
^
1 error generated.
Compiler returned: 1