c – 为什么不允许没有签名的OpenMP索引变量?

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

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

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

错误C3016:’i’:OpenMP’for’语句中的索引变量必须具有已签名的积分类型

我明白错误发生是因为我没有签名而不是签名,并且改变我被签名删除了这个错误。我想知道的是为什么这是一个错误?为什么不允许没有签名的索引变量?看这个错误的MSDN页面给了我没有线索。

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

OpenMP 3.0显然也允许未签名的类型,但是我还没有看到它。

http://stackoverflow.com/questions/2820621/why-arent-unsigned-openmp-index-variables-allowed

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 为什么不允许没有签名的OpenMP索引变量?