【发布时间】:2020-10-07 08:07:54
【问题描述】:
我正在一个 c++17 和 OpenMP 项目上测试 clang 10.0,当 #pragma omp parallel for 用于基于范围的 for 时出现错误。
clang 10 的发行说明,在OpenMP Support in Clang 部分,说得很清楚:
- 增加了对基于范围的循环的支持。
当我使用 clang++-10 -fopenmp -std=c++17 编译 MWE 时(在线编译器见 https://godbolt.org/z/fdTeMo):
#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
怎么了?
【问题讨论】:
-
看起来好像您没有使用 OpenMP 5.0(即使您使用的是支持其新功能的 clang 版本)。您是否尝试过明确选择 OpenMP 5.0(添加了对基于范围的 for 循环的支持)?
clang++-10 -fopenmp -fopenmp-version=50 -std=c++17. -
@dfri 是的,可行:godbolt.org/z/Erax36