簡體   English   中英

為什么不允許使用未簽名的OpenMP索引變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM