为什么不允许使用未签名的OpenMP索引变量?

Moe*_*Moe 20 c++ openmp

我的C++/OpenMP代码中有一个循环,如下所示:

#pragma omp parallel for
for(unsigned int i=0; i<count; i++)
{
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

当我编译它(使用Visual Studio 2005)时,我收到以下错误:

error C3016: 'i' : index variable in OpenMP 'for' statement must have signed integral type

我知道发生错误的原因i是因为是无符号而不是签名,而更改i为签名会删除此错误.我想知道的是为什么这是一个错误?为什么不允许使用无符号索引变量?查看此错误的MSDN页面没有提供任何线索.

Hea*_*eek 14

根据OpenMP 2.0 C/C++ API规范(pdf),第2.4.1节,这是for循环的限制之一.没有理由给它,但我怀疑它只是为了简化代码和编译器必须做出的假设,因为有特殊的代码来确保范围不会超出类型的最大值.

OpenMP 3.0显然也允许使用无符号类型,但我还没有看到它的实际应用.