首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么不允许无符号OpenMP索引变量?

为什么不允许无符号OpenMP索引变量?
EN

Stack Overflow用户
提问于 2010-05-13 00:08:12
回答 2查看 5K关注 0票数 21

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

代码语言:javascript
复制
#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页面没有给出任何线索。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-13 03:21:52

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

OpenMP 3.0显然也允许无符号类型,但我还没有看到它的实际效果。

票数 16
EN

Stack Overflow用户

发布于 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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2820621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档