我的C++/OpenMP代码中有一个循环,如下所示:
#pragma omp parallel for
for(unsigned int i=0; i<count; i++)
{
// do stuff
}
当我编译它(使用Visual Studio 2005)时,我得到以下错误:
error C3016: 'i' : index variable in OpenMP 'for' statement must have signed integral type
据我所知,之所以会出现这个错误,是因为i
是未签名的,而不是已签名的,并且将i
更改为签名可以消除此错误。我想知道的是为什么这是一个错误?为什么不允许无符号索引变量?查看此错误的MSDN页面没有给出任何线索。
发布于 2010-05-13 03:21:52
根据OpenMP 2.0 C/C++ API specification (pdf)的2.4.1节,这是for
循环的限制之一。没有给出原因,但我怀疑这只是为了简化代码和编译器必须做出的假设,因为有特殊的代码来确保范围不会溢出类型的最大值。
OpenMP 3.0显然也允许无符号类型,但我还没有看到它的实际效果。
发布于 2013-07-22 16:54:50
与Visual Studio2013集成的微软C/C++编译器12.0仍然只支持OpenMP 2.5,不允许循环计数器使用unsigned int
。
GCC从4.4版本开始支持OpenMP 3.0,并允许循环计数器使用unsigned int
。
https://stackoverflow.com/questions/2820621
复制相似问题