[英]Why aren't unsigned OpenMP index variables allowed?
我的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頁面沒有提供任何線索。
根據OpenMP 2.0 C / C ++ API規范 (pdf),第2.4.1節,這是for
循環的限制之一。 沒有理由給它,但我懷疑它只是為了簡化代碼和編譯器必須做出的假設,因為有特殊的代碼來確保范圍不會超出類型的最大值。
OpenMP 3.0顯然也允許使用無符號類型,但我還沒有看到它的實際應用。
與Visual Studio 2013集成的Microsoft C / C ++編譯器12.0仍然只支持OpenMP 2.5,並且不允許循環計數器使用unsigned int
。
GCC從版本4.4開始支持OpenMP 3.0,並允許循環計數器使用unsigned int
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.